001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * A booking of a healthcare event among patient(s), practitioner(s), related person(s) and/or device(s) for a specific date/time. This may result in one or more Encounter(s).
052 */
053@ResourceDef(name="Appointment", profile="http://hl7.org/fhir/StructureDefinition/Appointment")
054public class Appointment extends DomainResource {
055
056    public enum AppointmentStatus {
057        /**
058         * None of the participant(s) have finalized their acceptance of the appointment request, and the start/end time might not be set yet.
059         */
060        PROPOSED, 
061        /**
062         * Some or all of the participant(s) have not finalized their acceptance of the appointment request.
063         */
064        PENDING, 
065        /**
066         * All participant(s) have been considered and the appointment is confirmed to go ahead at the date/times specified.
067         */
068        BOOKED, 
069        /**
070         * The patient/patients has/have arrived and is/are waiting to be seen.
071         */
072        ARRIVED, 
073        /**
074         * The planning stages of the appointment are now complete, the encounter resource will exist and will track further status changes. Note that an encounter may exist before the appointment status is fulfilled for many reasons.
075         */
076        FULFILLED, 
077        /**
078         * The appointment has been cancelled.
079         */
080        CANCELLED, 
081        /**
082         * Some or all of the participant(s) have not/did not appear for the appointment (usually the patient).
083         */
084        NOSHOW, 
085        /**
086         * This instance should not have been part of this patient's medical record.
087         */
088        ENTEREDINERROR, 
089        /**
090         * When checked in, all pre-encounter administrative work is complete, and the encounter may begin. (where multiple patients are involved, they are all present).
091         */
092        CHECKEDIN, 
093        /**
094         * The appointment has been placed on a waitlist, to be scheduled/confirmed in the future when a slot/service is available.\nA specific time might or might not be pre-allocated.
095         */
096        WAITLIST, 
097        /**
098         * added to help the parsers with the generic types
099         */
100        NULL;
101        public static AppointmentStatus fromCode(String codeString) throws FHIRException {
102            if (codeString == null || "".equals(codeString))
103                return null;
104        if ("proposed".equals(codeString))
105          return PROPOSED;
106        if ("pending".equals(codeString))
107          return PENDING;
108        if ("booked".equals(codeString))
109          return BOOKED;
110        if ("arrived".equals(codeString))
111          return ARRIVED;
112        if ("fulfilled".equals(codeString))
113          return FULFILLED;
114        if ("cancelled".equals(codeString))
115          return CANCELLED;
116        if ("noshow".equals(codeString))
117          return NOSHOW;
118        if ("entered-in-error".equals(codeString))
119          return ENTEREDINERROR;
120        if ("checked-in".equals(codeString))
121          return CHECKEDIN;
122        if ("waitlist".equals(codeString))
123          return WAITLIST;
124        if (Configuration.isAcceptInvalidEnums())
125          return null;
126        else
127          throw new FHIRException("Unknown AppointmentStatus code '"+codeString+"'");
128        }
129        public String toCode() {
130          switch (this) {
131            case PROPOSED: return "proposed";
132            case PENDING: return "pending";
133            case BOOKED: return "booked";
134            case ARRIVED: return "arrived";
135            case FULFILLED: return "fulfilled";
136            case CANCELLED: return "cancelled";
137            case NOSHOW: return "noshow";
138            case ENTEREDINERROR: return "entered-in-error";
139            case CHECKEDIN: return "checked-in";
140            case WAITLIST: return "waitlist";
141            case NULL: return null;
142            default: return "?";
143          }
144        }
145        public String getSystem() {
146          switch (this) {
147            case PROPOSED: return "http://hl7.org/fhir/appointmentstatus";
148            case PENDING: return "http://hl7.org/fhir/appointmentstatus";
149            case BOOKED: return "http://hl7.org/fhir/appointmentstatus";
150            case ARRIVED: return "http://hl7.org/fhir/appointmentstatus";
151            case FULFILLED: return "http://hl7.org/fhir/appointmentstatus";
152            case CANCELLED: return "http://hl7.org/fhir/appointmentstatus";
153            case NOSHOW: return "http://hl7.org/fhir/appointmentstatus";
154            case ENTEREDINERROR: return "http://hl7.org/fhir/appointmentstatus";
155            case CHECKEDIN: return "http://hl7.org/fhir/appointmentstatus";
156            case WAITLIST: return "http://hl7.org/fhir/appointmentstatus";
157            case NULL: return null;
158            default: return "?";
159          }
160        }
161        public String getDefinition() {
162          switch (this) {
163            case PROPOSED: return "None of the participant(s) have finalized their acceptance of the appointment request, and the start/end time might not be set yet.";
164            case PENDING: return "Some or all of the participant(s) have not finalized their acceptance of the appointment request.";
165            case BOOKED: return "All participant(s) have been considered and the appointment is confirmed to go ahead at the date/times specified.";
166            case ARRIVED: return "The patient/patients has/have arrived and is/are waiting to be seen.";
167            case FULFILLED: return "The planning stages of the appointment are now complete, the encounter resource will exist and will track further status changes. Note that an encounter may exist before the appointment status is fulfilled for many reasons.";
168            case CANCELLED: return "The appointment has been cancelled.";
169            case NOSHOW: return "Some or all of the participant(s) have not/did not appear for the appointment (usually the patient).";
170            case ENTEREDINERROR: return "This instance should not have been part of this patient's medical record.";
171            case CHECKEDIN: return "When checked in, all pre-encounter administrative work is complete, and the encounter may begin. (where multiple patients are involved, they are all present).";
172            case WAITLIST: return "The appointment has been placed on a waitlist, to be scheduled/confirmed in the future when a slot/service is available.\nA specific time might or might not be pre-allocated.";
173            case NULL: return null;
174            default: return "?";
175          }
176        }
177        public String getDisplay() {
178          switch (this) {
179            case PROPOSED: return "Proposed";
180            case PENDING: return "Pending";
181            case BOOKED: return "Booked";
182            case ARRIVED: return "Arrived";
183            case FULFILLED: return "Fulfilled";
184            case CANCELLED: return "Cancelled";
185            case NOSHOW: return "No Show";
186            case ENTEREDINERROR: return "Entered in error";
187            case CHECKEDIN: return "Checked In";
188            case WAITLIST: return "Waitlisted";
189            case NULL: return null;
190            default: return "?";
191          }
192        }
193    }
194
195  public static class AppointmentStatusEnumFactory implements EnumFactory<AppointmentStatus> {
196    public AppointmentStatus fromCode(String codeString) throws IllegalArgumentException {
197      if (codeString == null || "".equals(codeString))
198            if (codeString == null || "".equals(codeString))
199                return null;
200        if ("proposed".equals(codeString))
201          return AppointmentStatus.PROPOSED;
202        if ("pending".equals(codeString))
203          return AppointmentStatus.PENDING;
204        if ("booked".equals(codeString))
205          return AppointmentStatus.BOOKED;
206        if ("arrived".equals(codeString))
207          return AppointmentStatus.ARRIVED;
208        if ("fulfilled".equals(codeString))
209          return AppointmentStatus.FULFILLED;
210        if ("cancelled".equals(codeString))
211          return AppointmentStatus.CANCELLED;
212        if ("noshow".equals(codeString))
213          return AppointmentStatus.NOSHOW;
214        if ("entered-in-error".equals(codeString))
215          return AppointmentStatus.ENTEREDINERROR;
216        if ("checked-in".equals(codeString))
217          return AppointmentStatus.CHECKEDIN;
218        if ("waitlist".equals(codeString))
219          return AppointmentStatus.WAITLIST;
220        throw new IllegalArgumentException("Unknown AppointmentStatus code '"+codeString+"'");
221        }
222        public Enumeration<AppointmentStatus> fromType(PrimitiveType<?> code) throws FHIRException {
223          if (code == null)
224            return null;
225          if (code.isEmpty())
226            return new Enumeration<AppointmentStatus>(this, AppointmentStatus.NULL, code);
227          String codeString = ((PrimitiveType) code).asStringValue();
228          if (codeString == null || "".equals(codeString))
229            return new Enumeration<AppointmentStatus>(this, AppointmentStatus.NULL, code);
230        if ("proposed".equals(codeString))
231          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.PROPOSED, code);
232        if ("pending".equals(codeString))
233          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.PENDING, code);
234        if ("booked".equals(codeString))
235          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.BOOKED, code);
236        if ("arrived".equals(codeString))
237          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.ARRIVED, code);
238        if ("fulfilled".equals(codeString))
239          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.FULFILLED, code);
240        if ("cancelled".equals(codeString))
241          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.CANCELLED, code);
242        if ("noshow".equals(codeString))
243          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.NOSHOW, code);
244        if ("entered-in-error".equals(codeString))
245          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.ENTEREDINERROR, code);
246        if ("checked-in".equals(codeString))
247          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.CHECKEDIN, code);
248        if ("waitlist".equals(codeString))
249          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.WAITLIST, code);
250        throw new FHIRException("Unknown AppointmentStatus code '"+codeString+"'");
251        }
252    public String toCode(AppointmentStatus code) {
253      if (code == AppointmentStatus.PROPOSED)
254        return "proposed";
255      if (code == AppointmentStatus.PENDING)
256        return "pending";
257      if (code == AppointmentStatus.BOOKED)
258        return "booked";
259      if (code == AppointmentStatus.ARRIVED)
260        return "arrived";
261      if (code == AppointmentStatus.FULFILLED)
262        return "fulfilled";
263      if (code == AppointmentStatus.CANCELLED)
264        return "cancelled";
265      if (code == AppointmentStatus.NOSHOW)
266        return "noshow";
267      if (code == AppointmentStatus.ENTEREDINERROR)
268        return "entered-in-error";
269      if (code == AppointmentStatus.CHECKEDIN)
270        return "checked-in";
271      if (code == AppointmentStatus.WAITLIST)
272        return "waitlist";
273      return "?";
274      }
275    public String toSystem(AppointmentStatus code) {
276      return code.getSystem();
277      }
278    }
279
280    public enum ParticipationStatus {
281        /**
282         * The participant has accepted the appointment.
283         */
284        ACCEPTED, 
285        /**
286         * The participant has declined the appointment and will not participate in the appointment.
287         */
288        DECLINED, 
289        /**
290         * The participant has  tentatively accepted the appointment. This could be automatically created by a system and requires further processing before it can be accepted. There is no commitment that attendance will occur.
291         */
292        TENTATIVE, 
293        /**
294         * The participant needs to indicate if they accept the appointment by changing this status to one of the other statuses.
295         */
296        NEEDSACTION, 
297        /**
298         * added to help the parsers with the generic types
299         */
300        NULL;
301        public static ParticipationStatus fromCode(String codeString) throws FHIRException {
302            if (codeString == null || "".equals(codeString))
303                return null;
304        if ("accepted".equals(codeString))
305          return ACCEPTED;
306        if ("declined".equals(codeString))
307          return DECLINED;
308        if ("tentative".equals(codeString))
309          return TENTATIVE;
310        if ("needs-action".equals(codeString))
311          return NEEDSACTION;
312        if (Configuration.isAcceptInvalidEnums())
313          return null;
314        else
315          throw new FHIRException("Unknown ParticipationStatus code '"+codeString+"'");
316        }
317        public String toCode() {
318          switch (this) {
319            case ACCEPTED: return "accepted";
320            case DECLINED: return "declined";
321            case TENTATIVE: return "tentative";
322            case NEEDSACTION: return "needs-action";
323            case NULL: return null;
324            default: return "?";
325          }
326        }
327        public String getSystem() {
328          switch (this) {
329            case ACCEPTED: return "http://hl7.org/fhir/participationstatus";
330            case DECLINED: return "http://hl7.org/fhir/participationstatus";
331            case TENTATIVE: return "http://hl7.org/fhir/participationstatus";
332            case NEEDSACTION: return "http://hl7.org/fhir/participationstatus";
333            case NULL: return null;
334            default: return "?";
335          }
336        }
337        public String getDefinition() {
338          switch (this) {
339            case ACCEPTED: return "The participant has accepted the appointment.";
340            case DECLINED: return "The participant has declined the appointment and will not participate in the appointment.";
341            case TENTATIVE: return "The participant has  tentatively accepted the appointment. This could be automatically created by a system and requires further processing before it can be accepted. There is no commitment that attendance will occur.";
342            case NEEDSACTION: return "The participant needs to indicate if they accept the appointment by changing this status to one of the other statuses.";
343            case NULL: return null;
344            default: return "?";
345          }
346        }
347        public String getDisplay() {
348          switch (this) {
349            case ACCEPTED: return "Accepted";
350            case DECLINED: return "Declined";
351            case TENTATIVE: return "Tentative";
352            case NEEDSACTION: return "Needs Action";
353            case NULL: return null;
354            default: return "?";
355          }
356        }
357    }
358
359  public static class ParticipationStatusEnumFactory implements EnumFactory<ParticipationStatus> {
360    public ParticipationStatus fromCode(String codeString) throws IllegalArgumentException {
361      if (codeString == null || "".equals(codeString))
362            if (codeString == null || "".equals(codeString))
363                return null;
364        if ("accepted".equals(codeString))
365          return ParticipationStatus.ACCEPTED;
366        if ("declined".equals(codeString))
367          return ParticipationStatus.DECLINED;
368        if ("tentative".equals(codeString))
369          return ParticipationStatus.TENTATIVE;
370        if ("needs-action".equals(codeString))
371          return ParticipationStatus.NEEDSACTION;
372        throw new IllegalArgumentException("Unknown ParticipationStatus code '"+codeString+"'");
373        }
374        public Enumeration<ParticipationStatus> fromType(PrimitiveType<?> code) throws FHIRException {
375          if (code == null)
376            return null;
377          if (code.isEmpty())
378            return new Enumeration<ParticipationStatus>(this, ParticipationStatus.NULL, code);
379          String codeString = ((PrimitiveType) code).asStringValue();
380          if (codeString == null || "".equals(codeString))
381            return new Enumeration<ParticipationStatus>(this, ParticipationStatus.NULL, code);
382        if ("accepted".equals(codeString))
383          return new Enumeration<ParticipationStatus>(this, ParticipationStatus.ACCEPTED, code);
384        if ("declined".equals(codeString))
385          return new Enumeration<ParticipationStatus>(this, ParticipationStatus.DECLINED, code);
386        if ("tentative".equals(codeString))
387          return new Enumeration<ParticipationStatus>(this, ParticipationStatus.TENTATIVE, code);
388        if ("needs-action".equals(codeString))
389          return new Enumeration<ParticipationStatus>(this, ParticipationStatus.NEEDSACTION, code);
390        throw new FHIRException("Unknown ParticipationStatus code '"+codeString+"'");
391        }
392    public String toCode(ParticipationStatus code) {
393      if (code == ParticipationStatus.ACCEPTED)
394        return "accepted";
395      if (code == ParticipationStatus.DECLINED)
396        return "declined";
397      if (code == ParticipationStatus.TENTATIVE)
398        return "tentative";
399      if (code == ParticipationStatus.NEEDSACTION)
400        return "needs-action";
401      return "?";
402      }
403    public String toSystem(ParticipationStatus code) {
404      return code.getSystem();
405      }
406    }
407
408    @Block()
409    public static class AppointmentParticipantComponent extends BackboneElement implements IBaseBackboneElement {
410        /**
411         * Role of participant in the appointment.
412         */
413        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
414        @Description(shortDefinition="Role of participant in the appointment", formalDefinition="Role of participant in the appointment." )
415        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/encounter-participant-type")
416        protected List<CodeableConcept> type;
417
418        /**
419         * Participation period of the actor.
420         */
421        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
422        @Description(shortDefinition="Participation period of the actor", formalDefinition="Participation period of the actor." )
423        protected Period period;
424
425        /**
426         * The individual, device, location, or service participating in the appointment.
427         */
428        @Child(name = "actor", type = {Patient.class, Group.class, Practitioner.class, PractitionerRole.class, CareTeam.class, RelatedPerson.class, Device.class, HealthcareService.class, Location.class}, order=3, min=0, max=1, modifier=false, summary=true)
429        @Description(shortDefinition="The individual, device, location, or service participating in the appointment", formalDefinition="The individual, device, location, or service participating in the appointment." )
430        protected Reference actor;
431
432        /**
433         * Whether this participant is required to be present at the meeting. If false, the participant is optional.
434         */
435        @Child(name = "required", type = {BooleanType.class}, order=4, min=0, max=1, modifier=false, summary=true)
436        @Description(shortDefinition="The participant is required to attend (optional when false)", formalDefinition="Whether this participant is required to be present at the meeting. If false, the participant is optional." )
437        protected BooleanType required;
438
439        /**
440         * Participation status of the actor.
441         */
442        @Child(name = "status", type = {CodeType.class}, order=5, min=1, max=1, modifier=false, summary=true)
443        @Description(shortDefinition="accepted | declined | tentative | needs-action", formalDefinition="Participation status of the actor." )
444        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/participationstatus")
445        protected Enumeration<ParticipationStatus> status;
446
447        private static final long serialVersionUID = 1537536134L;
448
449    /**
450     * Constructor
451     */
452      public AppointmentParticipantComponent() {
453        super();
454      }
455
456    /**
457     * Constructor
458     */
459      public AppointmentParticipantComponent(ParticipationStatus status) {
460        super();
461        this.setStatus(status);
462      }
463
464        /**
465         * @return {@link #type} (Role of participant in the appointment.)
466         */
467        public List<CodeableConcept> getType() { 
468          if (this.type == null)
469            this.type = new ArrayList<CodeableConcept>();
470          return this.type;
471        }
472
473        /**
474         * @return Returns a reference to <code>this</code> for easy method chaining
475         */
476        public AppointmentParticipantComponent setType(List<CodeableConcept> theType) { 
477          this.type = theType;
478          return this;
479        }
480
481        public boolean hasType() { 
482          if (this.type == null)
483            return false;
484          for (CodeableConcept item : this.type)
485            if (!item.isEmpty())
486              return true;
487          return false;
488        }
489
490        public CodeableConcept addType() { //3
491          CodeableConcept t = new CodeableConcept();
492          if (this.type == null)
493            this.type = new ArrayList<CodeableConcept>();
494          this.type.add(t);
495          return t;
496        }
497
498        public AppointmentParticipantComponent addType(CodeableConcept t) { //3
499          if (t == null)
500            return this;
501          if (this.type == null)
502            this.type = new ArrayList<CodeableConcept>();
503          this.type.add(t);
504          return this;
505        }
506
507        /**
508         * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
509         */
510        public CodeableConcept getTypeFirstRep() { 
511          if (getType().isEmpty()) {
512            addType();
513          }
514          return getType().get(0);
515        }
516
517        /**
518         * @return {@link #period} (Participation period of the actor.)
519         */
520        public Period getPeriod() { 
521          if (this.period == null)
522            if (Configuration.errorOnAutoCreate())
523              throw new Error("Attempt to auto-create AppointmentParticipantComponent.period");
524            else if (Configuration.doAutoCreate())
525              this.period = new Period(); // cc
526          return this.period;
527        }
528
529        public boolean hasPeriod() { 
530          return this.period != null && !this.period.isEmpty();
531        }
532
533        /**
534         * @param value {@link #period} (Participation period of the actor.)
535         */
536        public AppointmentParticipantComponent setPeriod(Period value) { 
537          this.period = value;
538          return this;
539        }
540
541        /**
542         * @return {@link #actor} (The individual, device, location, or service participating in the appointment.)
543         */
544        public Reference getActor() { 
545          if (this.actor == null)
546            if (Configuration.errorOnAutoCreate())
547              throw new Error("Attempt to auto-create AppointmentParticipantComponent.actor");
548            else if (Configuration.doAutoCreate())
549              this.actor = new Reference(); // cc
550          return this.actor;
551        }
552
553        public boolean hasActor() { 
554          return this.actor != null && !this.actor.isEmpty();
555        }
556
557        /**
558         * @param value {@link #actor} (The individual, device, location, or service participating in the appointment.)
559         */
560        public AppointmentParticipantComponent setActor(Reference value) { 
561          this.actor = value;
562          return this;
563        }
564
565        /**
566         * @return {@link #required} (Whether this participant is required to be present at the meeting. If false, the participant is optional.). This is the underlying object with id, value and extensions. The accessor "getRequired" gives direct access to the value
567         */
568        public BooleanType getRequiredElement() { 
569          if (this.required == null)
570            if (Configuration.errorOnAutoCreate())
571              throw new Error("Attempt to auto-create AppointmentParticipantComponent.required");
572            else if (Configuration.doAutoCreate())
573              this.required = new BooleanType(); // bb
574          return this.required;
575        }
576
577        public boolean hasRequiredElement() { 
578          return this.required != null && !this.required.isEmpty();
579        }
580
581        public boolean hasRequired() { 
582          return this.required != null && !this.required.isEmpty();
583        }
584
585        /**
586         * @param value {@link #required} (Whether this participant is required to be present at the meeting. If false, the participant is optional.). This is the underlying object with id, value and extensions. The accessor "getRequired" gives direct access to the value
587         */
588        public AppointmentParticipantComponent setRequiredElement(BooleanType value) { 
589          this.required = value;
590          return this;
591        }
592
593        /**
594         * @return Whether this participant is required to be present at the meeting. If false, the participant is optional.
595         */
596        public boolean getRequired() { 
597          return this.required == null || this.required.isEmpty() ? false : this.required.getValue();
598        }
599
600        /**
601         * @param value Whether this participant is required to be present at the meeting. If false, the participant is optional.
602         */
603        public AppointmentParticipantComponent setRequired(boolean value) { 
604            if (this.required == null)
605              this.required = new BooleanType();
606            this.required.setValue(value);
607          return this;
608        }
609
610        /**
611         * @return {@link #status} (Participation status of the actor.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
612         */
613        public Enumeration<ParticipationStatus> getStatusElement() { 
614          if (this.status == null)
615            if (Configuration.errorOnAutoCreate())
616              throw new Error("Attempt to auto-create AppointmentParticipantComponent.status");
617            else if (Configuration.doAutoCreate())
618              this.status = new Enumeration<ParticipationStatus>(new ParticipationStatusEnumFactory()); // bb
619          return this.status;
620        }
621
622        public boolean hasStatusElement() { 
623          return this.status != null && !this.status.isEmpty();
624        }
625
626        public boolean hasStatus() { 
627          return this.status != null && !this.status.isEmpty();
628        }
629
630        /**
631         * @param value {@link #status} (Participation status of the actor.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
632         */
633        public AppointmentParticipantComponent setStatusElement(Enumeration<ParticipationStatus> value) { 
634          this.status = value;
635          return this;
636        }
637
638        /**
639         * @return Participation status of the actor.
640         */
641        public ParticipationStatus getStatus() { 
642          return this.status == null ? null : this.status.getValue();
643        }
644
645        /**
646         * @param value Participation status of the actor.
647         */
648        public AppointmentParticipantComponent setStatus(ParticipationStatus value) { 
649            if (this.status == null)
650              this.status = new Enumeration<ParticipationStatus>(new ParticipationStatusEnumFactory());
651            this.status.setValue(value);
652          return this;
653        }
654
655        protected void listChildren(List<Property> children) {
656          super.listChildren(children);
657          children.add(new Property("type", "CodeableConcept", "Role of participant in the appointment.", 0, java.lang.Integer.MAX_VALUE, type));
658          children.add(new Property("period", "Period", "Participation period of the actor.", 0, 1, period));
659          children.add(new Property("actor", "Reference(Patient|Group|Practitioner|PractitionerRole|CareTeam|RelatedPerson|Device|HealthcareService|Location)", "The individual, device, location, or service participating in the appointment.", 0, 1, actor));
660          children.add(new Property("required", "boolean", "Whether this participant is required to be present at the meeting. If false, the participant is optional.", 0, 1, required));
661          children.add(new Property("status", "code", "Participation status of the actor.", 0, 1, status));
662        }
663
664        @Override
665        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
666          switch (_hash) {
667          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Role of participant in the appointment.", 0, java.lang.Integer.MAX_VALUE, type);
668          case -991726143: /*period*/  return new Property("period", "Period", "Participation period of the actor.", 0, 1, period);
669          case 92645877: /*actor*/  return new Property("actor", "Reference(Patient|Group|Practitioner|PractitionerRole|CareTeam|RelatedPerson|Device|HealthcareService|Location)", "The individual, device, location, or service participating in the appointment.", 0, 1, actor);
670          case -393139297: /*required*/  return new Property("required", "boolean", "Whether this participant is required to be present at the meeting. If false, the participant is optional.", 0, 1, required);
671          case -892481550: /*status*/  return new Property("status", "code", "Participation status of the actor.", 0, 1, status);
672          default: return super.getNamedProperty(_hash, _name, _checkValid);
673          }
674
675        }
676
677      @Override
678      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
679        switch (hash) {
680        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
681        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
682        case 92645877: /*actor*/ return this.actor == null ? new Base[0] : new Base[] {this.actor}; // Reference
683        case -393139297: /*required*/ return this.required == null ? new Base[0] : new Base[] {this.required}; // BooleanType
684        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ParticipationStatus>
685        default: return super.getProperty(hash, name, checkValid);
686        }
687
688      }
689
690      @Override
691      public Base setProperty(int hash, String name, Base value) throws FHIRException {
692        switch (hash) {
693        case 3575610: // type
694          this.getType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
695          return value;
696        case -991726143: // period
697          this.period = TypeConvertor.castToPeriod(value); // Period
698          return value;
699        case 92645877: // actor
700          this.actor = TypeConvertor.castToReference(value); // Reference
701          return value;
702        case -393139297: // required
703          this.required = TypeConvertor.castToBoolean(value); // BooleanType
704          return value;
705        case -892481550: // status
706          value = new ParticipationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
707          this.status = (Enumeration) value; // Enumeration<ParticipationStatus>
708          return value;
709        default: return super.setProperty(hash, name, value);
710        }
711
712      }
713
714      @Override
715      public Base setProperty(String name, Base value) throws FHIRException {
716        if (name.equals("type")) {
717          this.getType().add(TypeConvertor.castToCodeableConcept(value));
718        } else if (name.equals("period")) {
719          this.period = TypeConvertor.castToPeriod(value); // Period
720        } else if (name.equals("actor")) {
721          this.actor = TypeConvertor.castToReference(value); // Reference
722        } else if (name.equals("required")) {
723          this.required = TypeConvertor.castToBoolean(value); // BooleanType
724        } else if (name.equals("status")) {
725          value = new ParticipationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
726          this.status = (Enumeration) value; // Enumeration<ParticipationStatus>
727        } else
728          return super.setProperty(name, value);
729        return value;
730      }
731
732      @Override
733      public Base makeProperty(int hash, String name) throws FHIRException {
734        switch (hash) {
735        case 3575610:  return addType(); 
736        case -991726143:  return getPeriod();
737        case 92645877:  return getActor();
738        case -393139297:  return getRequiredElement();
739        case -892481550:  return getStatusElement();
740        default: return super.makeProperty(hash, name);
741        }
742
743      }
744
745      @Override
746      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
747        switch (hash) {
748        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
749        case -991726143: /*period*/ return new String[] {"Period"};
750        case 92645877: /*actor*/ return new String[] {"Reference"};
751        case -393139297: /*required*/ return new String[] {"boolean"};
752        case -892481550: /*status*/ return new String[] {"code"};
753        default: return super.getTypesForProperty(hash, name);
754        }
755
756      }
757
758      @Override
759      public Base addChild(String name) throws FHIRException {
760        if (name.equals("type")) {
761          return addType();
762        }
763        else if (name.equals("period")) {
764          this.period = new Period();
765          return this.period;
766        }
767        else if (name.equals("actor")) {
768          this.actor = new Reference();
769          return this.actor;
770        }
771        else if (name.equals("required")) {
772          throw new FHIRException("Cannot call addChild on a singleton property Appointment.participant.required");
773        }
774        else if (name.equals("status")) {
775          throw new FHIRException("Cannot call addChild on a singleton property Appointment.participant.status");
776        }
777        else
778          return super.addChild(name);
779      }
780
781      public AppointmentParticipantComponent copy() {
782        AppointmentParticipantComponent dst = new AppointmentParticipantComponent();
783        copyValues(dst);
784        return dst;
785      }
786
787      public void copyValues(AppointmentParticipantComponent dst) {
788        super.copyValues(dst);
789        if (type != null) {
790          dst.type = new ArrayList<CodeableConcept>();
791          for (CodeableConcept i : type)
792            dst.type.add(i.copy());
793        };
794        dst.period = period == null ? null : period.copy();
795        dst.actor = actor == null ? null : actor.copy();
796        dst.required = required == null ? null : required.copy();
797        dst.status = status == null ? null : status.copy();
798      }
799
800      @Override
801      public boolean equalsDeep(Base other_) {
802        if (!super.equalsDeep(other_))
803          return false;
804        if (!(other_ instanceof AppointmentParticipantComponent))
805          return false;
806        AppointmentParticipantComponent o = (AppointmentParticipantComponent) other_;
807        return compareDeep(type, o.type, true) && compareDeep(period, o.period, true) && compareDeep(actor, o.actor, true)
808           && compareDeep(required, o.required, true) && compareDeep(status, o.status, true);
809      }
810
811      @Override
812      public boolean equalsShallow(Base other_) {
813        if (!super.equalsShallow(other_))
814          return false;
815        if (!(other_ instanceof AppointmentParticipantComponent))
816          return false;
817        AppointmentParticipantComponent o = (AppointmentParticipantComponent) other_;
818        return compareValues(required, o.required, true) && compareValues(status, o.status, true);
819      }
820
821      public boolean isEmpty() {
822        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, period, actor, required
823          , status);
824      }
825
826  public String fhirType() {
827    return "Appointment.participant";
828
829  }
830
831  }
832
833    @Block()
834    public static class AppointmentRecurrenceTemplateComponent extends BackboneElement implements IBaseBackboneElement {
835        /**
836         * The timezone of the recurring appointment occurrences.
837         */
838        @Child(name = "timezone", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
839        @Description(shortDefinition="The timezone of the occurrences", formalDefinition="The timezone of the recurring appointment occurrences." )
840        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/timezones")
841        protected CodeableConcept timezone;
842
843        /**
844         * How often the appointment series should recur.
845         */
846        @Child(name = "recurrenceType", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=false)
847        @Description(shortDefinition="The frequency of the recurrence", formalDefinition="How often the appointment series should recur." )
848        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/appointment-recurrrence-type")
849        protected CodeableConcept recurrenceType;
850
851        /**
852         * Recurring appointments will not occur after this date.
853         */
854        @Child(name = "lastOccurrenceDate", type = {DateType.class}, order=3, min=0, max=1, modifier=false, summary=false)
855        @Description(shortDefinition="The date when the recurrence should end", formalDefinition="Recurring appointments will not occur after this date." )
856        protected DateType lastOccurrenceDate;
857
858        /**
859         * How many appointments are planned in the recurrence.
860         */
861        @Child(name = "occurrenceCount", type = {PositiveIntType.class}, order=4, min=0, max=1, modifier=false, summary=false)
862        @Description(shortDefinition="The number of planned occurrences", formalDefinition="How many appointments are planned in the recurrence." )
863        protected PositiveIntType occurrenceCount;
864
865        /**
866         * The list of specific dates that will have appointments generated.
867         */
868        @Child(name = "occurrenceDate", type = {DateType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
869        @Description(shortDefinition="Specific dates for a recurring set of appointments (no template)", formalDefinition="The list of specific dates that will have appointments generated." )
870        protected List<DateType> occurrenceDate;
871
872        /**
873         * Information about weekly recurring appointments.
874         */
875        @Child(name = "weeklyTemplate", type = {}, order=6, min=0, max=1, modifier=false, summary=false)
876        @Description(shortDefinition="Information about weekly recurring appointments", formalDefinition="Information about weekly recurring appointments." )
877        protected AppointmentRecurrenceTemplateWeeklyTemplateComponent weeklyTemplate;
878
879        /**
880         * Information about monthly recurring appointments.
881         */
882        @Child(name = "monthlyTemplate", type = {}, order=7, min=0, max=1, modifier=false, summary=false)
883        @Description(shortDefinition="Information about monthly recurring appointments", formalDefinition="Information about monthly recurring appointments." )
884        protected AppointmentRecurrenceTemplateMonthlyTemplateComponent monthlyTemplate;
885
886        /**
887         * Information about yearly recurring appointments.
888         */
889        @Child(name = "yearlyTemplate", type = {}, order=8, min=0, max=1, modifier=false, summary=false)
890        @Description(shortDefinition="Information about yearly recurring appointments", formalDefinition="Information about yearly recurring appointments." )
891        protected AppointmentRecurrenceTemplateYearlyTemplateComponent yearlyTemplate;
892
893        /**
894         * Any dates, such as holidays, that should be excluded from the recurrence.
895         */
896        @Child(name = "excludingDate", type = {DateType.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
897        @Description(shortDefinition="Any dates that should be excluded from the series", formalDefinition="Any dates, such as holidays, that should be excluded from the recurrence." )
898        protected List<DateType> excludingDate;
899
900        /**
901         * Any dates, such as holidays, that should be excluded from the recurrence.
902         */
903        @Child(name = "excludingRecurrenceId", type = {PositiveIntType.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
904        @Description(shortDefinition="Any recurrence IDs that should be excluded from the recurrence", formalDefinition="Any dates, such as holidays, that should be excluded from the recurrence." )
905        protected List<PositiveIntType> excludingRecurrenceId;
906
907        private static final long serialVersionUID = -1582999176L;
908
909    /**
910     * Constructor
911     */
912      public AppointmentRecurrenceTemplateComponent() {
913        super();
914      }
915
916    /**
917     * Constructor
918     */
919      public AppointmentRecurrenceTemplateComponent(CodeableConcept recurrenceType) {
920        super();
921        this.setRecurrenceType(recurrenceType);
922      }
923
924        /**
925         * @return {@link #timezone} (The timezone of the recurring appointment occurrences.)
926         */
927        public CodeableConcept getTimezone() { 
928          if (this.timezone == null)
929            if (Configuration.errorOnAutoCreate())
930              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateComponent.timezone");
931            else if (Configuration.doAutoCreate())
932              this.timezone = new CodeableConcept(); // cc
933          return this.timezone;
934        }
935
936        public boolean hasTimezone() { 
937          return this.timezone != null && !this.timezone.isEmpty();
938        }
939
940        /**
941         * @param value {@link #timezone} (The timezone of the recurring appointment occurrences.)
942         */
943        public AppointmentRecurrenceTemplateComponent setTimezone(CodeableConcept value) { 
944          this.timezone = value;
945          return this;
946        }
947
948        /**
949         * @return {@link #recurrenceType} (How often the appointment series should recur.)
950         */
951        public CodeableConcept getRecurrenceType() { 
952          if (this.recurrenceType == null)
953            if (Configuration.errorOnAutoCreate())
954              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateComponent.recurrenceType");
955            else if (Configuration.doAutoCreate())
956              this.recurrenceType = new CodeableConcept(); // cc
957          return this.recurrenceType;
958        }
959
960        public boolean hasRecurrenceType() { 
961          return this.recurrenceType != null && !this.recurrenceType.isEmpty();
962        }
963
964        /**
965         * @param value {@link #recurrenceType} (How often the appointment series should recur.)
966         */
967        public AppointmentRecurrenceTemplateComponent setRecurrenceType(CodeableConcept value) { 
968          this.recurrenceType = value;
969          return this;
970        }
971
972        /**
973         * @return {@link #lastOccurrenceDate} (Recurring appointments will not occur after this date.). This is the underlying object with id, value and extensions. The accessor "getLastOccurrenceDate" gives direct access to the value
974         */
975        public DateType getLastOccurrenceDateElement() { 
976          if (this.lastOccurrenceDate == null)
977            if (Configuration.errorOnAutoCreate())
978              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateComponent.lastOccurrenceDate");
979            else if (Configuration.doAutoCreate())
980              this.lastOccurrenceDate = new DateType(); // bb
981          return this.lastOccurrenceDate;
982        }
983
984        public boolean hasLastOccurrenceDateElement() { 
985          return this.lastOccurrenceDate != null && !this.lastOccurrenceDate.isEmpty();
986        }
987
988        public boolean hasLastOccurrenceDate() { 
989          return this.lastOccurrenceDate != null && !this.lastOccurrenceDate.isEmpty();
990        }
991
992        /**
993         * @param value {@link #lastOccurrenceDate} (Recurring appointments will not occur after this date.). This is the underlying object with id, value and extensions. The accessor "getLastOccurrenceDate" gives direct access to the value
994         */
995        public AppointmentRecurrenceTemplateComponent setLastOccurrenceDateElement(DateType value) { 
996          this.lastOccurrenceDate = value;
997          return this;
998        }
999
1000        /**
1001         * @return Recurring appointments will not occur after this date.
1002         */
1003        public Date getLastOccurrenceDate() { 
1004          return this.lastOccurrenceDate == null ? null : this.lastOccurrenceDate.getValue();
1005        }
1006
1007        /**
1008         * @param value Recurring appointments will not occur after this date.
1009         */
1010        public AppointmentRecurrenceTemplateComponent setLastOccurrenceDate(Date value) { 
1011          if (value == null)
1012            this.lastOccurrenceDate = null;
1013          else {
1014            if (this.lastOccurrenceDate == null)
1015              this.lastOccurrenceDate = new DateType();
1016            this.lastOccurrenceDate.setValue(value);
1017          }
1018          return this;
1019        }
1020
1021        /**
1022         * @return {@link #occurrenceCount} (How many appointments are planned in the recurrence.). This is the underlying object with id, value and extensions. The accessor "getOccurrenceCount" gives direct access to the value
1023         */
1024        public PositiveIntType getOccurrenceCountElement() { 
1025          if (this.occurrenceCount == null)
1026            if (Configuration.errorOnAutoCreate())
1027              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateComponent.occurrenceCount");
1028            else if (Configuration.doAutoCreate())
1029              this.occurrenceCount = new PositiveIntType(); // bb
1030          return this.occurrenceCount;
1031        }
1032
1033        public boolean hasOccurrenceCountElement() { 
1034          return this.occurrenceCount != null && !this.occurrenceCount.isEmpty();
1035        }
1036
1037        public boolean hasOccurrenceCount() { 
1038          return this.occurrenceCount != null && !this.occurrenceCount.isEmpty();
1039        }
1040
1041        /**
1042         * @param value {@link #occurrenceCount} (How many appointments are planned in the recurrence.). This is the underlying object with id, value and extensions. The accessor "getOccurrenceCount" gives direct access to the value
1043         */
1044        public AppointmentRecurrenceTemplateComponent setOccurrenceCountElement(PositiveIntType value) { 
1045          this.occurrenceCount = value;
1046          return this;
1047        }
1048
1049        /**
1050         * @return How many appointments are planned in the recurrence.
1051         */
1052        public int getOccurrenceCount() { 
1053          return this.occurrenceCount == null || this.occurrenceCount.isEmpty() ? 0 : this.occurrenceCount.getValue();
1054        }
1055
1056        /**
1057         * @param value How many appointments are planned in the recurrence.
1058         */
1059        public AppointmentRecurrenceTemplateComponent setOccurrenceCount(int value) { 
1060            if (this.occurrenceCount == null)
1061              this.occurrenceCount = new PositiveIntType();
1062            this.occurrenceCount.setValue(value);
1063          return this;
1064        }
1065
1066        /**
1067         * @return {@link #occurrenceDate} (The list of specific dates that will have appointments generated.)
1068         */
1069        public List<DateType> getOccurrenceDate() { 
1070          if (this.occurrenceDate == null)
1071            this.occurrenceDate = new ArrayList<DateType>();
1072          return this.occurrenceDate;
1073        }
1074
1075        /**
1076         * @return Returns a reference to <code>this</code> for easy method chaining
1077         */
1078        public AppointmentRecurrenceTemplateComponent setOccurrenceDate(List<DateType> theOccurrenceDate) { 
1079          this.occurrenceDate = theOccurrenceDate;
1080          return this;
1081        }
1082
1083        public boolean hasOccurrenceDate() { 
1084          if (this.occurrenceDate == null)
1085            return false;
1086          for (DateType item : this.occurrenceDate)
1087            if (!item.isEmpty())
1088              return true;
1089          return false;
1090        }
1091
1092        /**
1093         * @return {@link #occurrenceDate} (The list of specific dates that will have appointments generated.)
1094         */
1095        public DateType addOccurrenceDateElement() {//2 
1096          DateType t = new DateType();
1097          if (this.occurrenceDate == null)
1098            this.occurrenceDate = new ArrayList<DateType>();
1099          this.occurrenceDate.add(t);
1100          return t;
1101        }
1102
1103        /**
1104         * @param value {@link #occurrenceDate} (The list of specific dates that will have appointments generated.)
1105         */
1106        public AppointmentRecurrenceTemplateComponent addOccurrenceDate(Date value) { //1
1107          DateType t = new DateType();
1108          t.setValue(value);
1109          if (this.occurrenceDate == null)
1110            this.occurrenceDate = new ArrayList<DateType>();
1111          this.occurrenceDate.add(t);
1112          return this;
1113        }
1114
1115        /**
1116         * @param value {@link #occurrenceDate} (The list of specific dates that will have appointments generated.)
1117         */
1118        public boolean hasOccurrenceDate(Date value) { 
1119          if (this.occurrenceDate == null)
1120            return false;
1121          for (DateType v : this.occurrenceDate)
1122            if (v.getValue().equals(value)) // date
1123              return true;
1124          return false;
1125        }
1126
1127        /**
1128         * @return {@link #weeklyTemplate} (Information about weekly recurring appointments.)
1129         */
1130        public AppointmentRecurrenceTemplateWeeklyTemplateComponent getWeeklyTemplate() { 
1131          if (this.weeklyTemplate == null)
1132            if (Configuration.errorOnAutoCreate())
1133              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateComponent.weeklyTemplate");
1134            else if (Configuration.doAutoCreate())
1135              this.weeklyTemplate = new AppointmentRecurrenceTemplateWeeklyTemplateComponent(); // cc
1136          return this.weeklyTemplate;
1137        }
1138
1139        public boolean hasWeeklyTemplate() { 
1140          return this.weeklyTemplate != null && !this.weeklyTemplate.isEmpty();
1141        }
1142
1143        /**
1144         * @param value {@link #weeklyTemplate} (Information about weekly recurring appointments.)
1145         */
1146        public AppointmentRecurrenceTemplateComponent setWeeklyTemplate(AppointmentRecurrenceTemplateWeeklyTemplateComponent value) { 
1147          this.weeklyTemplate = value;
1148          return this;
1149        }
1150
1151        /**
1152         * @return {@link #monthlyTemplate} (Information about monthly recurring appointments.)
1153         */
1154        public AppointmentRecurrenceTemplateMonthlyTemplateComponent getMonthlyTemplate() { 
1155          if (this.monthlyTemplate == null)
1156            if (Configuration.errorOnAutoCreate())
1157              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateComponent.monthlyTemplate");
1158            else if (Configuration.doAutoCreate())
1159              this.monthlyTemplate = new AppointmentRecurrenceTemplateMonthlyTemplateComponent(); // cc
1160          return this.monthlyTemplate;
1161        }
1162
1163        public boolean hasMonthlyTemplate() { 
1164          return this.monthlyTemplate != null && !this.monthlyTemplate.isEmpty();
1165        }
1166
1167        /**
1168         * @param value {@link #monthlyTemplate} (Information about monthly recurring appointments.)
1169         */
1170        public AppointmentRecurrenceTemplateComponent setMonthlyTemplate(AppointmentRecurrenceTemplateMonthlyTemplateComponent value) { 
1171          this.monthlyTemplate = value;
1172          return this;
1173        }
1174
1175        /**
1176         * @return {@link #yearlyTemplate} (Information about yearly recurring appointments.)
1177         */
1178        public AppointmentRecurrenceTemplateYearlyTemplateComponent getYearlyTemplate() { 
1179          if (this.yearlyTemplate == null)
1180            if (Configuration.errorOnAutoCreate())
1181              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateComponent.yearlyTemplate");
1182            else if (Configuration.doAutoCreate())
1183              this.yearlyTemplate = new AppointmentRecurrenceTemplateYearlyTemplateComponent(); // cc
1184          return this.yearlyTemplate;
1185        }
1186
1187        public boolean hasYearlyTemplate() { 
1188          return this.yearlyTemplate != null && !this.yearlyTemplate.isEmpty();
1189        }
1190
1191        /**
1192         * @param value {@link #yearlyTemplate} (Information about yearly recurring appointments.)
1193         */
1194        public AppointmentRecurrenceTemplateComponent setYearlyTemplate(AppointmentRecurrenceTemplateYearlyTemplateComponent value) { 
1195          this.yearlyTemplate = value;
1196          return this;
1197        }
1198
1199        /**
1200         * @return {@link #excludingDate} (Any dates, such as holidays, that should be excluded from the recurrence.)
1201         */
1202        public List<DateType> getExcludingDate() { 
1203          if (this.excludingDate == null)
1204            this.excludingDate = new ArrayList<DateType>();
1205          return this.excludingDate;
1206        }
1207
1208        /**
1209         * @return Returns a reference to <code>this</code> for easy method chaining
1210         */
1211        public AppointmentRecurrenceTemplateComponent setExcludingDate(List<DateType> theExcludingDate) { 
1212          this.excludingDate = theExcludingDate;
1213          return this;
1214        }
1215
1216        public boolean hasExcludingDate() { 
1217          if (this.excludingDate == null)
1218            return false;
1219          for (DateType item : this.excludingDate)
1220            if (!item.isEmpty())
1221              return true;
1222          return false;
1223        }
1224
1225        /**
1226         * @return {@link #excludingDate} (Any dates, such as holidays, that should be excluded from the recurrence.)
1227         */
1228        public DateType addExcludingDateElement() {//2 
1229          DateType t = new DateType();
1230          if (this.excludingDate == null)
1231            this.excludingDate = new ArrayList<DateType>();
1232          this.excludingDate.add(t);
1233          return t;
1234        }
1235
1236        /**
1237         * @param value {@link #excludingDate} (Any dates, such as holidays, that should be excluded from the recurrence.)
1238         */
1239        public AppointmentRecurrenceTemplateComponent addExcludingDate(Date value) { //1
1240          DateType t = new DateType();
1241          t.setValue(value);
1242          if (this.excludingDate == null)
1243            this.excludingDate = new ArrayList<DateType>();
1244          this.excludingDate.add(t);
1245          return this;
1246        }
1247
1248        /**
1249         * @param value {@link #excludingDate} (Any dates, such as holidays, that should be excluded from the recurrence.)
1250         */
1251        public boolean hasExcludingDate(Date value) { 
1252          if (this.excludingDate == null)
1253            return false;
1254          for (DateType v : this.excludingDate)
1255            if (v.getValue().equals(value)) // date
1256              return true;
1257          return false;
1258        }
1259
1260        /**
1261         * @return {@link #excludingRecurrenceId} (Any dates, such as holidays, that should be excluded from the recurrence.)
1262         */
1263        public List<PositiveIntType> getExcludingRecurrenceId() { 
1264          if (this.excludingRecurrenceId == null)
1265            this.excludingRecurrenceId = new ArrayList<PositiveIntType>();
1266          return this.excludingRecurrenceId;
1267        }
1268
1269        /**
1270         * @return Returns a reference to <code>this</code> for easy method chaining
1271         */
1272        public AppointmentRecurrenceTemplateComponent setExcludingRecurrenceId(List<PositiveIntType> theExcludingRecurrenceId) { 
1273          this.excludingRecurrenceId = theExcludingRecurrenceId;
1274          return this;
1275        }
1276
1277        public boolean hasExcludingRecurrenceId() { 
1278          if (this.excludingRecurrenceId == null)
1279            return false;
1280          for (PositiveIntType item : this.excludingRecurrenceId)
1281            if (!item.isEmpty())
1282              return true;
1283          return false;
1284        }
1285
1286        /**
1287         * @return {@link #excludingRecurrenceId} (Any dates, such as holidays, that should be excluded from the recurrence.)
1288         */
1289        public PositiveIntType addExcludingRecurrenceIdElement() {//2 
1290          PositiveIntType t = new PositiveIntType();
1291          if (this.excludingRecurrenceId == null)
1292            this.excludingRecurrenceId = new ArrayList<PositiveIntType>();
1293          this.excludingRecurrenceId.add(t);
1294          return t;
1295        }
1296
1297        /**
1298         * @param value {@link #excludingRecurrenceId} (Any dates, such as holidays, that should be excluded from the recurrence.)
1299         */
1300        public AppointmentRecurrenceTemplateComponent addExcludingRecurrenceId(int value) { //1
1301          PositiveIntType t = new PositiveIntType();
1302          t.setValue(value);
1303          if (this.excludingRecurrenceId == null)
1304            this.excludingRecurrenceId = new ArrayList<PositiveIntType>();
1305          this.excludingRecurrenceId.add(t);
1306          return this;
1307        }
1308
1309        /**
1310         * @param value {@link #excludingRecurrenceId} (Any dates, such as holidays, that should be excluded from the recurrence.)
1311         */
1312        public boolean hasExcludingRecurrenceId(int value) { 
1313          if (this.excludingRecurrenceId == null)
1314            return false;
1315          for (PositiveIntType v : this.excludingRecurrenceId)
1316            if (v.getValue().equals(value)) // positiveInt
1317              return true;
1318          return false;
1319        }
1320
1321        protected void listChildren(List<Property> children) {
1322          super.listChildren(children);
1323          children.add(new Property("timezone", "CodeableConcept", "The timezone of the recurring appointment occurrences.", 0, 1, timezone));
1324          children.add(new Property("recurrenceType", "CodeableConcept", "How often the appointment series should recur.", 0, 1, recurrenceType));
1325          children.add(new Property("lastOccurrenceDate", "date", "Recurring appointments will not occur after this date.", 0, 1, lastOccurrenceDate));
1326          children.add(new Property("occurrenceCount", "positiveInt", "How many appointments are planned in the recurrence.", 0, 1, occurrenceCount));
1327          children.add(new Property("occurrenceDate", "date", "The list of specific dates that will have appointments generated.", 0, java.lang.Integer.MAX_VALUE, occurrenceDate));
1328          children.add(new Property("weeklyTemplate", "", "Information about weekly recurring appointments.", 0, 1, weeklyTemplate));
1329          children.add(new Property("monthlyTemplate", "", "Information about monthly recurring appointments.", 0, 1, monthlyTemplate));
1330          children.add(new Property("yearlyTemplate", "", "Information about yearly recurring appointments.", 0, 1, yearlyTemplate));
1331          children.add(new Property("excludingDate", "date", "Any dates, such as holidays, that should be excluded from the recurrence.", 0, java.lang.Integer.MAX_VALUE, excludingDate));
1332          children.add(new Property("excludingRecurrenceId", "positiveInt", "Any dates, such as holidays, that should be excluded from the recurrence.", 0, java.lang.Integer.MAX_VALUE, excludingRecurrenceId));
1333        }
1334
1335        @Override
1336        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1337          switch (_hash) {
1338          case -2076227591: /*timezone*/  return new Property("timezone", "CodeableConcept", "The timezone of the recurring appointment occurrences.", 0, 1, timezone);
1339          case -381221238: /*recurrenceType*/  return new Property("recurrenceType", "CodeableConcept", "How often the appointment series should recur.", 0, 1, recurrenceType);
1340          case -1262346923: /*lastOccurrenceDate*/  return new Property("lastOccurrenceDate", "date", "Recurring appointments will not occur after this date.", 0, 1, lastOccurrenceDate);
1341          case 1834480062: /*occurrenceCount*/  return new Property("occurrenceCount", "positiveInt", "How many appointments are planned in the recurrence.", 0, 1, occurrenceCount);
1342          case 1721761055: /*occurrenceDate*/  return new Property("occurrenceDate", "date", "The list of specific dates that will have appointments generated.", 0, java.lang.Integer.MAX_VALUE, occurrenceDate);
1343          case 887136283: /*weeklyTemplate*/  return new Property("weeklyTemplate", "", "Information about weekly recurring appointments.", 0, 1, weeklyTemplate);
1344          case 2142528423: /*monthlyTemplate*/  return new Property("monthlyTemplate", "", "Information about monthly recurring appointments.", 0, 1, monthlyTemplate);
1345          case -334069468: /*yearlyTemplate*/  return new Property("yearlyTemplate", "", "Information about yearly recurring appointments.", 0, 1, yearlyTemplate);
1346          case 596601957: /*excludingDate*/  return new Property("excludingDate", "date", "Any dates, such as holidays, that should be excluded from the recurrence.", 0, java.lang.Integer.MAX_VALUE, excludingDate);
1347          case -797577694: /*excludingRecurrenceId*/  return new Property("excludingRecurrenceId", "positiveInt", "Any dates, such as holidays, that should be excluded from the recurrence.", 0, java.lang.Integer.MAX_VALUE, excludingRecurrenceId);
1348          default: return super.getNamedProperty(_hash, _name, _checkValid);
1349          }
1350
1351        }
1352
1353      @Override
1354      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1355        switch (hash) {
1356        case -2076227591: /*timezone*/ return this.timezone == null ? new Base[0] : new Base[] {this.timezone}; // CodeableConcept
1357        case -381221238: /*recurrenceType*/ return this.recurrenceType == null ? new Base[0] : new Base[] {this.recurrenceType}; // CodeableConcept
1358        case -1262346923: /*lastOccurrenceDate*/ return this.lastOccurrenceDate == null ? new Base[0] : new Base[] {this.lastOccurrenceDate}; // DateType
1359        case 1834480062: /*occurrenceCount*/ return this.occurrenceCount == null ? new Base[0] : new Base[] {this.occurrenceCount}; // PositiveIntType
1360        case 1721761055: /*occurrenceDate*/ return this.occurrenceDate == null ? new Base[0] : this.occurrenceDate.toArray(new Base[this.occurrenceDate.size()]); // DateType
1361        case 887136283: /*weeklyTemplate*/ return this.weeklyTemplate == null ? new Base[0] : new Base[] {this.weeklyTemplate}; // AppointmentRecurrenceTemplateWeeklyTemplateComponent
1362        case 2142528423: /*monthlyTemplate*/ return this.monthlyTemplate == null ? new Base[0] : new Base[] {this.monthlyTemplate}; // AppointmentRecurrenceTemplateMonthlyTemplateComponent
1363        case -334069468: /*yearlyTemplate*/ return this.yearlyTemplate == null ? new Base[0] : new Base[] {this.yearlyTemplate}; // AppointmentRecurrenceTemplateYearlyTemplateComponent
1364        case 596601957: /*excludingDate*/ return this.excludingDate == null ? new Base[0] : this.excludingDate.toArray(new Base[this.excludingDate.size()]); // DateType
1365        case -797577694: /*excludingRecurrenceId*/ return this.excludingRecurrenceId == null ? new Base[0] : this.excludingRecurrenceId.toArray(new Base[this.excludingRecurrenceId.size()]); // PositiveIntType
1366        default: return super.getProperty(hash, name, checkValid);
1367        }
1368
1369      }
1370
1371      @Override
1372      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1373        switch (hash) {
1374        case -2076227591: // timezone
1375          this.timezone = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1376          return value;
1377        case -381221238: // recurrenceType
1378          this.recurrenceType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1379          return value;
1380        case -1262346923: // lastOccurrenceDate
1381          this.lastOccurrenceDate = TypeConvertor.castToDate(value); // DateType
1382          return value;
1383        case 1834480062: // occurrenceCount
1384          this.occurrenceCount = TypeConvertor.castToPositiveInt(value); // PositiveIntType
1385          return value;
1386        case 1721761055: // occurrenceDate
1387          this.getOccurrenceDate().add(TypeConvertor.castToDate(value)); // DateType
1388          return value;
1389        case 887136283: // weeklyTemplate
1390          this.weeklyTemplate = (AppointmentRecurrenceTemplateWeeklyTemplateComponent) value; // AppointmentRecurrenceTemplateWeeklyTemplateComponent
1391          return value;
1392        case 2142528423: // monthlyTemplate
1393          this.monthlyTemplate = (AppointmentRecurrenceTemplateMonthlyTemplateComponent) value; // AppointmentRecurrenceTemplateMonthlyTemplateComponent
1394          return value;
1395        case -334069468: // yearlyTemplate
1396          this.yearlyTemplate = (AppointmentRecurrenceTemplateYearlyTemplateComponent) value; // AppointmentRecurrenceTemplateYearlyTemplateComponent
1397          return value;
1398        case 596601957: // excludingDate
1399          this.getExcludingDate().add(TypeConvertor.castToDate(value)); // DateType
1400          return value;
1401        case -797577694: // excludingRecurrenceId
1402          this.getExcludingRecurrenceId().add(TypeConvertor.castToPositiveInt(value)); // PositiveIntType
1403          return value;
1404        default: return super.setProperty(hash, name, value);
1405        }
1406
1407      }
1408
1409      @Override
1410      public Base setProperty(String name, Base value) throws FHIRException {
1411        if (name.equals("timezone")) {
1412          this.timezone = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1413        } else if (name.equals("recurrenceType")) {
1414          this.recurrenceType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1415        } else if (name.equals("lastOccurrenceDate")) {
1416          this.lastOccurrenceDate = TypeConvertor.castToDate(value); // DateType
1417        } else if (name.equals("occurrenceCount")) {
1418          this.occurrenceCount = TypeConvertor.castToPositiveInt(value); // PositiveIntType
1419        } else if (name.equals("occurrenceDate")) {
1420          this.getOccurrenceDate().add(TypeConvertor.castToDate(value));
1421        } else if (name.equals("weeklyTemplate")) {
1422          this.weeklyTemplate = (AppointmentRecurrenceTemplateWeeklyTemplateComponent) value; // AppointmentRecurrenceTemplateWeeklyTemplateComponent
1423        } else if (name.equals("monthlyTemplate")) {
1424          this.monthlyTemplate = (AppointmentRecurrenceTemplateMonthlyTemplateComponent) value; // AppointmentRecurrenceTemplateMonthlyTemplateComponent
1425        } else if (name.equals("yearlyTemplate")) {
1426          this.yearlyTemplate = (AppointmentRecurrenceTemplateYearlyTemplateComponent) value; // AppointmentRecurrenceTemplateYearlyTemplateComponent
1427        } else if (name.equals("excludingDate")) {
1428          this.getExcludingDate().add(TypeConvertor.castToDate(value));
1429        } else if (name.equals("excludingRecurrenceId")) {
1430          this.getExcludingRecurrenceId().add(TypeConvertor.castToPositiveInt(value));
1431        } else
1432          return super.setProperty(name, value);
1433        return value;
1434      }
1435
1436      @Override
1437      public Base makeProperty(int hash, String name) throws FHIRException {
1438        switch (hash) {
1439        case -2076227591:  return getTimezone();
1440        case -381221238:  return getRecurrenceType();
1441        case -1262346923:  return getLastOccurrenceDateElement();
1442        case 1834480062:  return getOccurrenceCountElement();
1443        case 1721761055:  return addOccurrenceDateElement();
1444        case 887136283:  return getWeeklyTemplate();
1445        case 2142528423:  return getMonthlyTemplate();
1446        case -334069468:  return getYearlyTemplate();
1447        case 596601957:  return addExcludingDateElement();
1448        case -797577694:  return addExcludingRecurrenceIdElement();
1449        default: return super.makeProperty(hash, name);
1450        }
1451
1452      }
1453
1454      @Override
1455      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1456        switch (hash) {
1457        case -2076227591: /*timezone*/ return new String[] {"CodeableConcept"};
1458        case -381221238: /*recurrenceType*/ return new String[] {"CodeableConcept"};
1459        case -1262346923: /*lastOccurrenceDate*/ return new String[] {"date"};
1460        case 1834480062: /*occurrenceCount*/ return new String[] {"positiveInt"};
1461        case 1721761055: /*occurrenceDate*/ return new String[] {"date"};
1462        case 887136283: /*weeklyTemplate*/ return new String[] {};
1463        case 2142528423: /*monthlyTemplate*/ return new String[] {};
1464        case -334069468: /*yearlyTemplate*/ return new String[] {};
1465        case 596601957: /*excludingDate*/ return new String[] {"date"};
1466        case -797577694: /*excludingRecurrenceId*/ return new String[] {"positiveInt"};
1467        default: return super.getTypesForProperty(hash, name);
1468        }
1469
1470      }
1471
1472      @Override
1473      public Base addChild(String name) throws FHIRException {
1474        if (name.equals("timezone")) {
1475          this.timezone = new CodeableConcept();
1476          return this.timezone;
1477        }
1478        else if (name.equals("recurrenceType")) {
1479          this.recurrenceType = new CodeableConcept();
1480          return this.recurrenceType;
1481        }
1482        else if (name.equals("lastOccurrenceDate")) {
1483          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.lastOccurrenceDate");
1484        }
1485        else if (name.equals("occurrenceCount")) {
1486          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.occurrenceCount");
1487        }
1488        else if (name.equals("occurrenceDate")) {
1489          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.occurrenceDate");
1490        }
1491        else if (name.equals("weeklyTemplate")) {
1492          this.weeklyTemplate = new AppointmentRecurrenceTemplateWeeklyTemplateComponent();
1493          return this.weeklyTemplate;
1494        }
1495        else if (name.equals("monthlyTemplate")) {
1496          this.monthlyTemplate = new AppointmentRecurrenceTemplateMonthlyTemplateComponent();
1497          return this.monthlyTemplate;
1498        }
1499        else if (name.equals("yearlyTemplate")) {
1500          this.yearlyTemplate = new AppointmentRecurrenceTemplateYearlyTemplateComponent();
1501          return this.yearlyTemplate;
1502        }
1503        else if (name.equals("excludingDate")) {
1504          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.excludingDate");
1505        }
1506        else if (name.equals("excludingRecurrenceId")) {
1507          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.excludingRecurrenceId");
1508        }
1509        else
1510          return super.addChild(name);
1511      }
1512
1513      public AppointmentRecurrenceTemplateComponent copy() {
1514        AppointmentRecurrenceTemplateComponent dst = new AppointmentRecurrenceTemplateComponent();
1515        copyValues(dst);
1516        return dst;
1517      }
1518
1519      public void copyValues(AppointmentRecurrenceTemplateComponent dst) {
1520        super.copyValues(dst);
1521        dst.timezone = timezone == null ? null : timezone.copy();
1522        dst.recurrenceType = recurrenceType == null ? null : recurrenceType.copy();
1523        dst.lastOccurrenceDate = lastOccurrenceDate == null ? null : lastOccurrenceDate.copy();
1524        dst.occurrenceCount = occurrenceCount == null ? null : occurrenceCount.copy();
1525        if (occurrenceDate != null) {
1526          dst.occurrenceDate = new ArrayList<DateType>();
1527          for (DateType i : occurrenceDate)
1528            dst.occurrenceDate.add(i.copy());
1529        };
1530        dst.weeklyTemplate = weeklyTemplate == null ? null : weeklyTemplate.copy();
1531        dst.monthlyTemplate = monthlyTemplate == null ? null : monthlyTemplate.copy();
1532        dst.yearlyTemplate = yearlyTemplate == null ? null : yearlyTemplate.copy();
1533        if (excludingDate != null) {
1534          dst.excludingDate = new ArrayList<DateType>();
1535          for (DateType i : excludingDate)
1536            dst.excludingDate.add(i.copy());
1537        };
1538        if (excludingRecurrenceId != null) {
1539          dst.excludingRecurrenceId = new ArrayList<PositiveIntType>();
1540          for (PositiveIntType i : excludingRecurrenceId)
1541            dst.excludingRecurrenceId.add(i.copy());
1542        };
1543      }
1544
1545      @Override
1546      public boolean equalsDeep(Base other_) {
1547        if (!super.equalsDeep(other_))
1548          return false;
1549        if (!(other_ instanceof AppointmentRecurrenceTemplateComponent))
1550          return false;
1551        AppointmentRecurrenceTemplateComponent o = (AppointmentRecurrenceTemplateComponent) other_;
1552        return compareDeep(timezone, o.timezone, true) && compareDeep(recurrenceType, o.recurrenceType, true)
1553           && compareDeep(lastOccurrenceDate, o.lastOccurrenceDate, true) && compareDeep(occurrenceCount, o.occurrenceCount, true)
1554           && compareDeep(occurrenceDate, o.occurrenceDate, true) && compareDeep(weeklyTemplate, o.weeklyTemplate, true)
1555           && compareDeep(monthlyTemplate, o.monthlyTemplate, true) && compareDeep(yearlyTemplate, o.yearlyTemplate, true)
1556           && compareDeep(excludingDate, o.excludingDate, true) && compareDeep(excludingRecurrenceId, o.excludingRecurrenceId, true)
1557          ;
1558      }
1559
1560      @Override
1561      public boolean equalsShallow(Base other_) {
1562        if (!super.equalsShallow(other_))
1563          return false;
1564        if (!(other_ instanceof AppointmentRecurrenceTemplateComponent))
1565          return false;
1566        AppointmentRecurrenceTemplateComponent o = (AppointmentRecurrenceTemplateComponent) other_;
1567        return compareValues(lastOccurrenceDate, o.lastOccurrenceDate, true) && compareValues(occurrenceCount, o.occurrenceCount, true)
1568           && compareValues(occurrenceDate, o.occurrenceDate, true) && compareValues(excludingDate, o.excludingDate, true)
1569           && compareValues(excludingRecurrenceId, o.excludingRecurrenceId, true);
1570      }
1571
1572      public boolean isEmpty() {
1573        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(timezone, recurrenceType, lastOccurrenceDate
1574          , occurrenceCount, occurrenceDate, weeklyTemplate, monthlyTemplate, yearlyTemplate
1575          , excludingDate, excludingRecurrenceId);
1576      }
1577
1578  public String fhirType() {
1579    return "Appointment.recurrenceTemplate";
1580
1581  }
1582
1583  }
1584
1585    @Block()
1586    public static class AppointmentRecurrenceTemplateWeeklyTemplateComponent extends BackboneElement implements IBaseBackboneElement {
1587        /**
1588         * Indicates that recurring appointments should occur on Mondays.
1589         */
1590        @Child(name = "monday", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1591        @Description(shortDefinition="Recurs on Mondays", formalDefinition="Indicates that recurring appointments should occur on Mondays." )
1592        protected BooleanType monday;
1593
1594        /**
1595         * Indicates that recurring appointments should occur on Tuesdays.
1596         */
1597        @Child(name = "tuesday", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1598        @Description(shortDefinition="Recurs on Tuesday", formalDefinition="Indicates that recurring appointments should occur on Tuesdays." )
1599        protected BooleanType tuesday;
1600
1601        /**
1602         * Indicates that recurring appointments should occur on Wednesdays.
1603         */
1604        @Child(name = "wednesday", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1605        @Description(shortDefinition="Recurs on Wednesday", formalDefinition="Indicates that recurring appointments should occur on Wednesdays." )
1606        protected BooleanType wednesday;
1607
1608        /**
1609         * Indicates that recurring appointments should occur on Thursdays.
1610         */
1611        @Child(name = "thursday", type = {BooleanType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1612        @Description(shortDefinition="Recurs on Thursday", formalDefinition="Indicates that recurring appointments should occur on Thursdays." )
1613        protected BooleanType thursday;
1614
1615        /**
1616         * Indicates that recurring appointments should occur on Fridays.
1617         */
1618        @Child(name = "friday", type = {BooleanType.class}, order=5, min=0, max=1, modifier=false, summary=false)
1619        @Description(shortDefinition="Recurs on Friday", formalDefinition="Indicates that recurring appointments should occur on Fridays." )
1620        protected BooleanType friday;
1621
1622        /**
1623         * Indicates that recurring appointments should occur on Saturdays.
1624         */
1625        @Child(name = "saturday", type = {BooleanType.class}, order=6, min=0, max=1, modifier=false, summary=false)
1626        @Description(shortDefinition="Recurs on Saturday", formalDefinition="Indicates that recurring appointments should occur on Saturdays." )
1627        protected BooleanType saturday;
1628
1629        /**
1630         * Indicates that recurring appointments should occur on Sundays.
1631         */
1632        @Child(name = "sunday", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=false)
1633        @Description(shortDefinition="Recurs on Sunday", formalDefinition="Indicates that recurring appointments should occur on Sundays." )
1634        protected BooleanType sunday;
1635
1636        /**
1637         * The interval defines if the recurrence is every nth week. The default is every week, so it is expected that this value will be 2 or more.
1638
1639e.g. For recurring every second week this interval would be 2, or every third week the interval would be 3.
1640         */
1641        @Child(name = "weekInterval", type = {PositiveIntType.class}, order=8, min=0, max=1, modifier=false, summary=false)
1642        @Description(shortDefinition="Recurs every nth week", formalDefinition="The interval defines if the recurrence is every nth week. The default is every week, so it is expected that this value will be 2 or more.\r\re.g. For recurring every second week this interval would be 2, or every third week the interval would be 3." )
1643        protected PositiveIntType weekInterval;
1644
1645        private static final long serialVersionUID = 588795188L;
1646
1647    /**
1648     * Constructor
1649     */
1650      public AppointmentRecurrenceTemplateWeeklyTemplateComponent() {
1651        super();
1652      }
1653
1654        /**
1655         * @return {@link #monday} (Indicates that recurring appointments should occur on Mondays.). This is the underlying object with id, value and extensions. The accessor "getMonday" gives direct access to the value
1656         */
1657        public BooleanType getMondayElement() { 
1658          if (this.monday == null)
1659            if (Configuration.errorOnAutoCreate())
1660              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateWeeklyTemplateComponent.monday");
1661            else if (Configuration.doAutoCreate())
1662              this.monday = new BooleanType(); // bb
1663          return this.monday;
1664        }
1665
1666        public boolean hasMondayElement() { 
1667          return this.monday != null && !this.monday.isEmpty();
1668        }
1669
1670        public boolean hasMonday() { 
1671          return this.monday != null && !this.monday.isEmpty();
1672        }
1673
1674        /**
1675         * @param value {@link #monday} (Indicates that recurring appointments should occur on Mondays.). This is the underlying object with id, value and extensions. The accessor "getMonday" gives direct access to the value
1676         */
1677        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setMondayElement(BooleanType value) { 
1678          this.monday = value;
1679          return this;
1680        }
1681
1682        /**
1683         * @return Indicates that recurring appointments should occur on Mondays.
1684         */
1685        public boolean getMonday() { 
1686          return this.monday == null || this.monday.isEmpty() ? false : this.monday.getValue();
1687        }
1688
1689        /**
1690         * @param value Indicates that recurring appointments should occur on Mondays.
1691         */
1692        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setMonday(boolean value) { 
1693            if (this.monday == null)
1694              this.monday = new BooleanType();
1695            this.monday.setValue(value);
1696          return this;
1697        }
1698
1699        /**
1700         * @return {@link #tuesday} (Indicates that recurring appointments should occur on Tuesdays.). This is the underlying object with id, value and extensions. The accessor "getTuesday" gives direct access to the value
1701         */
1702        public BooleanType getTuesdayElement() { 
1703          if (this.tuesday == null)
1704            if (Configuration.errorOnAutoCreate())
1705              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateWeeklyTemplateComponent.tuesday");
1706            else if (Configuration.doAutoCreate())
1707              this.tuesday = new BooleanType(); // bb
1708          return this.tuesday;
1709        }
1710
1711        public boolean hasTuesdayElement() { 
1712          return this.tuesday != null && !this.tuesday.isEmpty();
1713        }
1714
1715        public boolean hasTuesday() { 
1716          return this.tuesday != null && !this.tuesday.isEmpty();
1717        }
1718
1719        /**
1720         * @param value {@link #tuesday} (Indicates that recurring appointments should occur on Tuesdays.). This is the underlying object with id, value and extensions. The accessor "getTuesday" gives direct access to the value
1721         */
1722        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setTuesdayElement(BooleanType value) { 
1723          this.tuesday = value;
1724          return this;
1725        }
1726
1727        /**
1728         * @return Indicates that recurring appointments should occur on Tuesdays.
1729         */
1730        public boolean getTuesday() { 
1731          return this.tuesday == null || this.tuesday.isEmpty() ? false : this.tuesday.getValue();
1732        }
1733
1734        /**
1735         * @param value Indicates that recurring appointments should occur on Tuesdays.
1736         */
1737        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setTuesday(boolean value) { 
1738            if (this.tuesday == null)
1739              this.tuesday = new BooleanType();
1740            this.tuesday.setValue(value);
1741          return this;
1742        }
1743
1744        /**
1745         * @return {@link #wednesday} (Indicates that recurring appointments should occur on Wednesdays.). This is the underlying object with id, value and extensions. The accessor "getWednesday" gives direct access to the value
1746         */
1747        public BooleanType getWednesdayElement() { 
1748          if (this.wednesday == null)
1749            if (Configuration.errorOnAutoCreate())
1750              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateWeeklyTemplateComponent.wednesday");
1751            else if (Configuration.doAutoCreate())
1752              this.wednesday = new BooleanType(); // bb
1753          return this.wednesday;
1754        }
1755
1756        public boolean hasWednesdayElement() { 
1757          return this.wednesday != null && !this.wednesday.isEmpty();
1758        }
1759
1760        public boolean hasWednesday() { 
1761          return this.wednesday != null && !this.wednesday.isEmpty();
1762        }
1763
1764        /**
1765         * @param value {@link #wednesday} (Indicates that recurring appointments should occur on Wednesdays.). This is the underlying object with id, value and extensions. The accessor "getWednesday" gives direct access to the value
1766         */
1767        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setWednesdayElement(BooleanType value) { 
1768          this.wednesday = value;
1769          return this;
1770        }
1771
1772        /**
1773         * @return Indicates that recurring appointments should occur on Wednesdays.
1774         */
1775        public boolean getWednesday() { 
1776          return this.wednesday == null || this.wednesday.isEmpty() ? false : this.wednesday.getValue();
1777        }
1778
1779        /**
1780         * @param value Indicates that recurring appointments should occur on Wednesdays.
1781         */
1782        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setWednesday(boolean value) { 
1783            if (this.wednesday == null)
1784              this.wednesday = new BooleanType();
1785            this.wednesday.setValue(value);
1786          return this;
1787        }
1788
1789        /**
1790         * @return {@link #thursday} (Indicates that recurring appointments should occur on Thursdays.). This is the underlying object with id, value and extensions. The accessor "getThursday" gives direct access to the value
1791         */
1792        public BooleanType getThursdayElement() { 
1793          if (this.thursday == null)
1794            if (Configuration.errorOnAutoCreate())
1795              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateWeeklyTemplateComponent.thursday");
1796            else if (Configuration.doAutoCreate())
1797              this.thursday = new BooleanType(); // bb
1798          return this.thursday;
1799        }
1800
1801        public boolean hasThursdayElement() { 
1802          return this.thursday != null && !this.thursday.isEmpty();
1803        }
1804
1805        public boolean hasThursday() { 
1806          return this.thursday != null && !this.thursday.isEmpty();
1807        }
1808
1809        /**
1810         * @param value {@link #thursday} (Indicates that recurring appointments should occur on Thursdays.). This is the underlying object with id, value and extensions. The accessor "getThursday" gives direct access to the value
1811         */
1812        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setThursdayElement(BooleanType value) { 
1813          this.thursday = value;
1814          return this;
1815        }
1816
1817        /**
1818         * @return Indicates that recurring appointments should occur on Thursdays.
1819         */
1820        public boolean getThursday() { 
1821          return this.thursday == null || this.thursday.isEmpty() ? false : this.thursday.getValue();
1822        }
1823
1824        /**
1825         * @param value Indicates that recurring appointments should occur on Thursdays.
1826         */
1827        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setThursday(boolean value) { 
1828            if (this.thursday == null)
1829              this.thursday = new BooleanType();
1830            this.thursday.setValue(value);
1831          return this;
1832        }
1833
1834        /**
1835         * @return {@link #friday} (Indicates that recurring appointments should occur on Fridays.). This is the underlying object with id, value and extensions. The accessor "getFriday" gives direct access to the value
1836         */
1837        public BooleanType getFridayElement() { 
1838          if (this.friday == null)
1839            if (Configuration.errorOnAutoCreate())
1840              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateWeeklyTemplateComponent.friday");
1841            else if (Configuration.doAutoCreate())
1842              this.friday = new BooleanType(); // bb
1843          return this.friday;
1844        }
1845
1846        public boolean hasFridayElement() { 
1847          return this.friday != null && !this.friday.isEmpty();
1848        }
1849
1850        public boolean hasFriday() { 
1851          return this.friday != null && !this.friday.isEmpty();
1852        }
1853
1854        /**
1855         * @param value {@link #friday} (Indicates that recurring appointments should occur on Fridays.). This is the underlying object with id, value and extensions. The accessor "getFriday" gives direct access to the value
1856         */
1857        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setFridayElement(BooleanType value) { 
1858          this.friday = value;
1859          return this;
1860        }
1861
1862        /**
1863         * @return Indicates that recurring appointments should occur on Fridays.
1864         */
1865        public boolean getFriday() { 
1866          return this.friday == null || this.friday.isEmpty() ? false : this.friday.getValue();
1867        }
1868
1869        /**
1870         * @param value Indicates that recurring appointments should occur on Fridays.
1871         */
1872        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setFriday(boolean value) { 
1873            if (this.friday == null)
1874              this.friday = new BooleanType();
1875            this.friday.setValue(value);
1876          return this;
1877        }
1878
1879        /**
1880         * @return {@link #saturday} (Indicates that recurring appointments should occur on Saturdays.). This is the underlying object with id, value and extensions. The accessor "getSaturday" gives direct access to the value
1881         */
1882        public BooleanType getSaturdayElement() { 
1883          if (this.saturday == null)
1884            if (Configuration.errorOnAutoCreate())
1885              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateWeeklyTemplateComponent.saturday");
1886            else if (Configuration.doAutoCreate())
1887              this.saturday = new BooleanType(); // bb
1888          return this.saturday;
1889        }
1890
1891        public boolean hasSaturdayElement() { 
1892          return this.saturday != null && !this.saturday.isEmpty();
1893        }
1894
1895        public boolean hasSaturday() { 
1896          return this.saturday != null && !this.saturday.isEmpty();
1897        }
1898
1899        /**
1900         * @param value {@link #saturday} (Indicates that recurring appointments should occur on Saturdays.). This is the underlying object with id, value and extensions. The accessor "getSaturday" gives direct access to the value
1901         */
1902        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setSaturdayElement(BooleanType value) { 
1903          this.saturday = value;
1904          return this;
1905        }
1906
1907        /**
1908         * @return Indicates that recurring appointments should occur on Saturdays.
1909         */
1910        public boolean getSaturday() { 
1911          return this.saturday == null || this.saturday.isEmpty() ? false : this.saturday.getValue();
1912        }
1913
1914        /**
1915         * @param value Indicates that recurring appointments should occur on Saturdays.
1916         */
1917        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setSaturday(boolean value) { 
1918            if (this.saturday == null)
1919              this.saturday = new BooleanType();
1920            this.saturday.setValue(value);
1921          return this;
1922        }
1923
1924        /**
1925         * @return {@link #sunday} (Indicates that recurring appointments should occur on Sundays.). This is the underlying object with id, value and extensions. The accessor "getSunday" gives direct access to the value
1926         */
1927        public BooleanType getSundayElement() { 
1928          if (this.sunday == null)
1929            if (Configuration.errorOnAutoCreate())
1930              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateWeeklyTemplateComponent.sunday");
1931            else if (Configuration.doAutoCreate())
1932              this.sunday = new BooleanType(); // bb
1933          return this.sunday;
1934        }
1935
1936        public boolean hasSundayElement() { 
1937          return this.sunday != null && !this.sunday.isEmpty();
1938        }
1939
1940        public boolean hasSunday() { 
1941          return this.sunday != null && !this.sunday.isEmpty();
1942        }
1943
1944        /**
1945         * @param value {@link #sunday} (Indicates that recurring appointments should occur on Sundays.). This is the underlying object with id, value and extensions. The accessor "getSunday" gives direct access to the value
1946         */
1947        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setSundayElement(BooleanType value) { 
1948          this.sunday = value;
1949          return this;
1950        }
1951
1952        /**
1953         * @return Indicates that recurring appointments should occur on Sundays.
1954         */
1955        public boolean getSunday() { 
1956          return this.sunday == null || this.sunday.isEmpty() ? false : this.sunday.getValue();
1957        }
1958
1959        /**
1960         * @param value Indicates that recurring appointments should occur on Sundays.
1961         */
1962        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setSunday(boolean value) { 
1963            if (this.sunday == null)
1964              this.sunday = new BooleanType();
1965            this.sunday.setValue(value);
1966          return this;
1967        }
1968
1969        /**
1970         * @return {@link #weekInterval} (The interval defines if the recurrence is every nth week. The default is every week, so it is expected that this value will be 2 or more.
1971
1972e.g. For recurring every second week this interval would be 2, or every third week the interval would be 3.). This is the underlying object with id, value and extensions. The accessor "getWeekInterval" gives direct access to the value
1973         */
1974        public PositiveIntType getWeekIntervalElement() { 
1975          if (this.weekInterval == null)
1976            if (Configuration.errorOnAutoCreate())
1977              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateWeeklyTemplateComponent.weekInterval");
1978            else if (Configuration.doAutoCreate())
1979              this.weekInterval = new PositiveIntType(); // bb
1980          return this.weekInterval;
1981        }
1982
1983        public boolean hasWeekIntervalElement() { 
1984          return this.weekInterval != null && !this.weekInterval.isEmpty();
1985        }
1986
1987        public boolean hasWeekInterval() { 
1988          return this.weekInterval != null && !this.weekInterval.isEmpty();
1989        }
1990
1991        /**
1992         * @param value {@link #weekInterval} (The interval defines if the recurrence is every nth week. The default is every week, so it is expected that this value will be 2 or more.
1993
1994e.g. For recurring every second week this interval would be 2, or every third week the interval would be 3.). This is the underlying object with id, value and extensions. The accessor "getWeekInterval" gives direct access to the value
1995         */
1996        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setWeekIntervalElement(PositiveIntType value) { 
1997          this.weekInterval = value;
1998          return this;
1999        }
2000
2001        /**
2002         * @return The interval defines if the recurrence is every nth week. The default is every week, so it is expected that this value will be 2 or more.
2003
2004e.g. For recurring every second week this interval would be 2, or every third week the interval would be 3.
2005         */
2006        public int getWeekInterval() { 
2007          return this.weekInterval == null || this.weekInterval.isEmpty() ? 0 : this.weekInterval.getValue();
2008        }
2009
2010        /**
2011         * @param value The interval defines if the recurrence is every nth week. The default is every week, so it is expected that this value will be 2 or more.
2012
2013e.g. For recurring every second week this interval would be 2, or every third week the interval would be 3.
2014         */
2015        public AppointmentRecurrenceTemplateWeeklyTemplateComponent setWeekInterval(int value) { 
2016            if (this.weekInterval == null)
2017              this.weekInterval = new PositiveIntType();
2018            this.weekInterval.setValue(value);
2019          return this;
2020        }
2021
2022        protected void listChildren(List<Property> children) {
2023          super.listChildren(children);
2024          children.add(new Property("monday", "boolean", "Indicates that recurring appointments should occur on Mondays.", 0, 1, monday));
2025          children.add(new Property("tuesday", "boolean", "Indicates that recurring appointments should occur on Tuesdays.", 0, 1, tuesday));
2026          children.add(new Property("wednesday", "boolean", "Indicates that recurring appointments should occur on Wednesdays.", 0, 1, wednesday));
2027          children.add(new Property("thursday", "boolean", "Indicates that recurring appointments should occur on Thursdays.", 0, 1, thursday));
2028          children.add(new Property("friday", "boolean", "Indicates that recurring appointments should occur on Fridays.", 0, 1, friday));
2029          children.add(new Property("saturday", "boolean", "Indicates that recurring appointments should occur on Saturdays.", 0, 1, saturday));
2030          children.add(new Property("sunday", "boolean", "Indicates that recurring appointments should occur on Sundays.", 0, 1, sunday));
2031          children.add(new Property("weekInterval", "positiveInt", "The interval defines if the recurrence is every nth week. The default is every week, so it is expected that this value will be 2 or more.\r\re.g. For recurring every second week this interval would be 2, or every third week the interval would be 3.", 0, 1, weekInterval));
2032        }
2033
2034        @Override
2035        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2036          switch (_hash) {
2037          case -1068502768: /*monday*/  return new Property("monday", "boolean", "Indicates that recurring appointments should occur on Mondays.", 0, 1, monday);
2038          case -977343923: /*tuesday*/  return new Property("tuesday", "boolean", "Indicates that recurring appointments should occur on Tuesdays.", 0, 1, tuesday);
2039          case 1393530710: /*wednesday*/  return new Property("wednesday", "boolean", "Indicates that recurring appointments should occur on Wednesdays.", 0, 1, wednesday);
2040          case 1572055514: /*thursday*/  return new Property("thursday", "boolean", "Indicates that recurring appointments should occur on Thursdays.", 0, 1, thursday);
2041          case -1266285217: /*friday*/  return new Property("friday", "boolean", "Indicates that recurring appointments should occur on Fridays.", 0, 1, friday);
2042          case -2114201671: /*saturday*/  return new Property("saturday", "boolean", "Indicates that recurring appointments should occur on Saturdays.", 0, 1, saturday);
2043          case -891186736: /*sunday*/  return new Property("sunday", "boolean", "Indicates that recurring appointments should occur on Sundays.", 0, 1, sunday);
2044          case -784550695: /*weekInterval*/  return new Property("weekInterval", "positiveInt", "The interval defines if the recurrence is every nth week. The default is every week, so it is expected that this value will be 2 or more.\r\re.g. For recurring every second week this interval would be 2, or every third week the interval would be 3.", 0, 1, weekInterval);
2045          default: return super.getNamedProperty(_hash, _name, _checkValid);
2046          }
2047
2048        }
2049
2050      @Override
2051      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2052        switch (hash) {
2053        case -1068502768: /*monday*/ return this.monday == null ? new Base[0] : new Base[] {this.monday}; // BooleanType
2054        case -977343923: /*tuesday*/ return this.tuesday == null ? new Base[0] : new Base[] {this.tuesday}; // BooleanType
2055        case 1393530710: /*wednesday*/ return this.wednesday == null ? new Base[0] : new Base[] {this.wednesday}; // BooleanType
2056        case 1572055514: /*thursday*/ return this.thursday == null ? new Base[0] : new Base[] {this.thursday}; // BooleanType
2057        case -1266285217: /*friday*/ return this.friday == null ? new Base[0] : new Base[] {this.friday}; // BooleanType
2058        case -2114201671: /*saturday*/ return this.saturday == null ? new Base[0] : new Base[] {this.saturday}; // BooleanType
2059        case -891186736: /*sunday*/ return this.sunday == null ? new Base[0] : new Base[] {this.sunday}; // BooleanType
2060        case -784550695: /*weekInterval*/ return this.weekInterval == null ? new Base[0] : new Base[] {this.weekInterval}; // PositiveIntType
2061        default: return super.getProperty(hash, name, checkValid);
2062        }
2063
2064      }
2065
2066      @Override
2067      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2068        switch (hash) {
2069        case -1068502768: // monday
2070          this.monday = TypeConvertor.castToBoolean(value); // BooleanType
2071          return value;
2072        case -977343923: // tuesday
2073          this.tuesday = TypeConvertor.castToBoolean(value); // BooleanType
2074          return value;
2075        case 1393530710: // wednesday
2076          this.wednesday = TypeConvertor.castToBoolean(value); // BooleanType
2077          return value;
2078        case 1572055514: // thursday
2079          this.thursday = TypeConvertor.castToBoolean(value); // BooleanType
2080          return value;
2081        case -1266285217: // friday
2082          this.friday = TypeConvertor.castToBoolean(value); // BooleanType
2083          return value;
2084        case -2114201671: // saturday
2085          this.saturday = TypeConvertor.castToBoolean(value); // BooleanType
2086          return value;
2087        case -891186736: // sunday
2088          this.sunday = TypeConvertor.castToBoolean(value); // BooleanType
2089          return value;
2090        case -784550695: // weekInterval
2091          this.weekInterval = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2092          return value;
2093        default: return super.setProperty(hash, name, value);
2094        }
2095
2096      }
2097
2098      @Override
2099      public Base setProperty(String name, Base value) throws FHIRException {
2100        if (name.equals("monday")) {
2101          this.monday = TypeConvertor.castToBoolean(value); // BooleanType
2102        } else if (name.equals("tuesday")) {
2103          this.tuesday = TypeConvertor.castToBoolean(value); // BooleanType
2104        } else if (name.equals("wednesday")) {
2105          this.wednesday = TypeConvertor.castToBoolean(value); // BooleanType
2106        } else if (name.equals("thursday")) {
2107          this.thursday = TypeConvertor.castToBoolean(value); // BooleanType
2108        } else if (name.equals("friday")) {
2109          this.friday = TypeConvertor.castToBoolean(value); // BooleanType
2110        } else if (name.equals("saturday")) {
2111          this.saturday = TypeConvertor.castToBoolean(value); // BooleanType
2112        } else if (name.equals("sunday")) {
2113          this.sunday = TypeConvertor.castToBoolean(value); // BooleanType
2114        } else if (name.equals("weekInterval")) {
2115          this.weekInterval = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2116        } else
2117          return super.setProperty(name, value);
2118        return value;
2119      }
2120
2121      @Override
2122      public Base makeProperty(int hash, String name) throws FHIRException {
2123        switch (hash) {
2124        case -1068502768:  return getMondayElement();
2125        case -977343923:  return getTuesdayElement();
2126        case 1393530710:  return getWednesdayElement();
2127        case 1572055514:  return getThursdayElement();
2128        case -1266285217:  return getFridayElement();
2129        case -2114201671:  return getSaturdayElement();
2130        case -891186736:  return getSundayElement();
2131        case -784550695:  return getWeekIntervalElement();
2132        default: return super.makeProperty(hash, name);
2133        }
2134
2135      }
2136
2137      @Override
2138      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2139        switch (hash) {
2140        case -1068502768: /*monday*/ return new String[] {"boolean"};
2141        case -977343923: /*tuesday*/ return new String[] {"boolean"};
2142        case 1393530710: /*wednesday*/ return new String[] {"boolean"};
2143        case 1572055514: /*thursday*/ return new String[] {"boolean"};
2144        case -1266285217: /*friday*/ return new String[] {"boolean"};
2145        case -2114201671: /*saturday*/ return new String[] {"boolean"};
2146        case -891186736: /*sunday*/ return new String[] {"boolean"};
2147        case -784550695: /*weekInterval*/ return new String[] {"positiveInt"};
2148        default: return super.getTypesForProperty(hash, name);
2149        }
2150
2151      }
2152
2153      @Override
2154      public Base addChild(String name) throws FHIRException {
2155        if (name.equals("monday")) {
2156          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.weeklyTemplate.monday");
2157        }
2158        else if (name.equals("tuesday")) {
2159          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.weeklyTemplate.tuesday");
2160        }
2161        else if (name.equals("wednesday")) {
2162          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.weeklyTemplate.wednesday");
2163        }
2164        else if (name.equals("thursday")) {
2165          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.weeklyTemplate.thursday");
2166        }
2167        else if (name.equals("friday")) {
2168          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.weeklyTemplate.friday");
2169        }
2170        else if (name.equals("saturday")) {
2171          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.weeklyTemplate.saturday");
2172        }
2173        else if (name.equals("sunday")) {
2174          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.weeklyTemplate.sunday");
2175        }
2176        else if (name.equals("weekInterval")) {
2177          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.weeklyTemplate.weekInterval");
2178        }
2179        else
2180          return super.addChild(name);
2181      }
2182
2183      public AppointmentRecurrenceTemplateWeeklyTemplateComponent copy() {
2184        AppointmentRecurrenceTemplateWeeklyTemplateComponent dst = new AppointmentRecurrenceTemplateWeeklyTemplateComponent();
2185        copyValues(dst);
2186        return dst;
2187      }
2188
2189      public void copyValues(AppointmentRecurrenceTemplateWeeklyTemplateComponent dst) {
2190        super.copyValues(dst);
2191        dst.monday = monday == null ? null : monday.copy();
2192        dst.tuesday = tuesday == null ? null : tuesday.copy();
2193        dst.wednesday = wednesday == null ? null : wednesday.copy();
2194        dst.thursday = thursday == null ? null : thursday.copy();
2195        dst.friday = friday == null ? null : friday.copy();
2196        dst.saturday = saturday == null ? null : saturday.copy();
2197        dst.sunday = sunday == null ? null : sunday.copy();
2198        dst.weekInterval = weekInterval == null ? null : weekInterval.copy();
2199      }
2200
2201      @Override
2202      public boolean equalsDeep(Base other_) {
2203        if (!super.equalsDeep(other_))
2204          return false;
2205        if (!(other_ instanceof AppointmentRecurrenceTemplateWeeklyTemplateComponent))
2206          return false;
2207        AppointmentRecurrenceTemplateWeeklyTemplateComponent o = (AppointmentRecurrenceTemplateWeeklyTemplateComponent) other_;
2208        return compareDeep(monday, o.monday, true) && compareDeep(tuesday, o.tuesday, true) && compareDeep(wednesday, o.wednesday, true)
2209           && compareDeep(thursday, o.thursday, true) && compareDeep(friday, o.friday, true) && compareDeep(saturday, o.saturday, true)
2210           && compareDeep(sunday, o.sunday, true) && compareDeep(weekInterval, o.weekInterval, true);
2211      }
2212
2213      @Override
2214      public boolean equalsShallow(Base other_) {
2215        if (!super.equalsShallow(other_))
2216          return false;
2217        if (!(other_ instanceof AppointmentRecurrenceTemplateWeeklyTemplateComponent))
2218          return false;
2219        AppointmentRecurrenceTemplateWeeklyTemplateComponent o = (AppointmentRecurrenceTemplateWeeklyTemplateComponent) other_;
2220        return compareValues(monday, o.monday, true) && compareValues(tuesday, o.tuesday, true) && compareValues(wednesday, o.wednesday, true)
2221           && compareValues(thursday, o.thursday, true) && compareValues(friday, o.friday, true) && compareValues(saturday, o.saturday, true)
2222           && compareValues(sunday, o.sunday, true) && compareValues(weekInterval, o.weekInterval, true);
2223      }
2224
2225      public boolean isEmpty() {
2226        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(monday, tuesday, wednesday
2227          , thursday, friday, saturday, sunday, weekInterval);
2228      }
2229
2230  public String fhirType() {
2231    return "Appointment.recurrenceTemplate.weeklyTemplate";
2232
2233  }
2234
2235  }
2236
2237    @Block()
2238    public static class AppointmentRecurrenceTemplateMonthlyTemplateComponent extends BackboneElement implements IBaseBackboneElement {
2239        /**
2240         * Indicates that appointments in the series of recurring appointments should occur on a specific day of the month.
2241         */
2242        @Child(name = "dayOfMonth", type = {PositiveIntType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2243        @Description(shortDefinition="Recurs on a specific day of the month", formalDefinition="Indicates that appointments in the series of recurring appointments should occur on a specific day of the month." )
2244        protected PositiveIntType dayOfMonth;
2245
2246        /**
2247         * Indicates which week within a month the appointments in the series of recurring appointments should occur on.
2248         */
2249        @Child(name = "nthWeekOfMonth", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=false)
2250        @Description(shortDefinition="Indicates which week of the month the appointment should occur", formalDefinition="Indicates which week within a month the appointments in the series of recurring appointments should occur on." )
2251        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/week-of-month")
2252        protected Coding nthWeekOfMonth;
2253
2254        /**
2255         * Indicates which day of the week the recurring appointments should occur each nth week.
2256         */
2257        @Child(name = "dayOfWeek", type = {Coding.class}, order=3, min=0, max=1, modifier=false, summary=false)
2258        @Description(shortDefinition="Indicates which day of the week the appointment should occur", formalDefinition="Indicates which day of the week the recurring appointments should occur each nth week." )
2259        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/days-of-week")
2260        protected Coding dayOfWeek;
2261
2262        /**
2263         * Indicates that recurring appointments should occur every nth month.
2264         */
2265        @Child(name = "monthInterval", type = {PositiveIntType.class}, order=4, min=1, max=1, modifier=false, summary=false)
2266        @Description(shortDefinition="Recurs every nth month", formalDefinition="Indicates that recurring appointments should occur every nth month." )
2267        protected PositiveIntType monthInterval;
2268
2269        private static final long serialVersionUID = -1234046272L;
2270
2271    /**
2272     * Constructor
2273     */
2274      public AppointmentRecurrenceTemplateMonthlyTemplateComponent() {
2275        super();
2276      }
2277
2278    /**
2279     * Constructor
2280     */
2281      public AppointmentRecurrenceTemplateMonthlyTemplateComponent(int monthInterval) {
2282        super();
2283        this.setMonthInterval(monthInterval);
2284      }
2285
2286        /**
2287         * @return {@link #dayOfMonth} (Indicates that appointments in the series of recurring appointments should occur on a specific day of the month.). This is the underlying object with id, value and extensions. The accessor "getDayOfMonth" gives direct access to the value
2288         */
2289        public PositiveIntType getDayOfMonthElement() { 
2290          if (this.dayOfMonth == null)
2291            if (Configuration.errorOnAutoCreate())
2292              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateMonthlyTemplateComponent.dayOfMonth");
2293            else if (Configuration.doAutoCreate())
2294              this.dayOfMonth = new PositiveIntType(); // bb
2295          return this.dayOfMonth;
2296        }
2297
2298        public boolean hasDayOfMonthElement() { 
2299          return this.dayOfMonth != null && !this.dayOfMonth.isEmpty();
2300        }
2301
2302        public boolean hasDayOfMonth() { 
2303          return this.dayOfMonth != null && !this.dayOfMonth.isEmpty();
2304        }
2305
2306        /**
2307         * @param value {@link #dayOfMonth} (Indicates that appointments in the series of recurring appointments should occur on a specific day of the month.). This is the underlying object with id, value and extensions. The accessor "getDayOfMonth" gives direct access to the value
2308         */
2309        public AppointmentRecurrenceTemplateMonthlyTemplateComponent setDayOfMonthElement(PositiveIntType value) { 
2310          this.dayOfMonth = value;
2311          return this;
2312        }
2313
2314        /**
2315         * @return Indicates that appointments in the series of recurring appointments should occur on a specific day of the month.
2316         */
2317        public int getDayOfMonth() { 
2318          return this.dayOfMonth == null || this.dayOfMonth.isEmpty() ? 0 : this.dayOfMonth.getValue();
2319        }
2320
2321        /**
2322         * @param value Indicates that appointments in the series of recurring appointments should occur on a specific day of the month.
2323         */
2324        public AppointmentRecurrenceTemplateMonthlyTemplateComponent setDayOfMonth(int value) { 
2325            if (this.dayOfMonth == null)
2326              this.dayOfMonth = new PositiveIntType();
2327            this.dayOfMonth.setValue(value);
2328          return this;
2329        }
2330
2331        /**
2332         * @return {@link #nthWeekOfMonth} (Indicates which week within a month the appointments in the series of recurring appointments should occur on.)
2333         */
2334        public Coding getNthWeekOfMonth() { 
2335          if (this.nthWeekOfMonth == null)
2336            if (Configuration.errorOnAutoCreate())
2337              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateMonthlyTemplateComponent.nthWeekOfMonth");
2338            else if (Configuration.doAutoCreate())
2339              this.nthWeekOfMonth = new Coding(); // cc
2340          return this.nthWeekOfMonth;
2341        }
2342
2343        public boolean hasNthWeekOfMonth() { 
2344          return this.nthWeekOfMonth != null && !this.nthWeekOfMonth.isEmpty();
2345        }
2346
2347        /**
2348         * @param value {@link #nthWeekOfMonth} (Indicates which week within a month the appointments in the series of recurring appointments should occur on.)
2349         */
2350        public AppointmentRecurrenceTemplateMonthlyTemplateComponent setNthWeekOfMonth(Coding value) { 
2351          this.nthWeekOfMonth = value;
2352          return this;
2353        }
2354
2355        /**
2356         * @return {@link #dayOfWeek} (Indicates which day of the week the recurring appointments should occur each nth week.)
2357         */
2358        public Coding getDayOfWeek() { 
2359          if (this.dayOfWeek == null)
2360            if (Configuration.errorOnAutoCreate())
2361              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateMonthlyTemplateComponent.dayOfWeek");
2362            else if (Configuration.doAutoCreate())
2363              this.dayOfWeek = new Coding(); // cc
2364          return this.dayOfWeek;
2365        }
2366
2367        public boolean hasDayOfWeek() { 
2368          return this.dayOfWeek != null && !this.dayOfWeek.isEmpty();
2369        }
2370
2371        /**
2372         * @param value {@link #dayOfWeek} (Indicates which day of the week the recurring appointments should occur each nth week.)
2373         */
2374        public AppointmentRecurrenceTemplateMonthlyTemplateComponent setDayOfWeek(Coding value) { 
2375          this.dayOfWeek = value;
2376          return this;
2377        }
2378
2379        /**
2380         * @return {@link #monthInterval} (Indicates that recurring appointments should occur every nth month.). This is the underlying object with id, value and extensions. The accessor "getMonthInterval" gives direct access to the value
2381         */
2382        public PositiveIntType getMonthIntervalElement() { 
2383          if (this.monthInterval == null)
2384            if (Configuration.errorOnAutoCreate())
2385              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateMonthlyTemplateComponent.monthInterval");
2386            else if (Configuration.doAutoCreate())
2387              this.monthInterval = new PositiveIntType(); // bb
2388          return this.monthInterval;
2389        }
2390
2391        public boolean hasMonthIntervalElement() { 
2392          return this.monthInterval != null && !this.monthInterval.isEmpty();
2393        }
2394
2395        public boolean hasMonthInterval() { 
2396          return this.monthInterval != null && !this.monthInterval.isEmpty();
2397        }
2398
2399        /**
2400         * @param value {@link #monthInterval} (Indicates that recurring appointments should occur every nth month.). This is the underlying object with id, value and extensions. The accessor "getMonthInterval" gives direct access to the value
2401         */
2402        public AppointmentRecurrenceTemplateMonthlyTemplateComponent setMonthIntervalElement(PositiveIntType value) { 
2403          this.monthInterval = value;
2404          return this;
2405        }
2406
2407        /**
2408         * @return Indicates that recurring appointments should occur every nth month.
2409         */
2410        public int getMonthInterval() { 
2411          return this.monthInterval == null || this.monthInterval.isEmpty() ? 0 : this.monthInterval.getValue();
2412        }
2413
2414        /**
2415         * @param value Indicates that recurring appointments should occur every nth month.
2416         */
2417        public AppointmentRecurrenceTemplateMonthlyTemplateComponent setMonthInterval(int value) { 
2418            if (this.monthInterval == null)
2419              this.monthInterval = new PositiveIntType();
2420            this.monthInterval.setValue(value);
2421          return this;
2422        }
2423
2424        protected void listChildren(List<Property> children) {
2425          super.listChildren(children);
2426          children.add(new Property("dayOfMonth", "positiveInt", "Indicates that appointments in the series of recurring appointments should occur on a specific day of the month.", 0, 1, dayOfMonth));
2427          children.add(new Property("nthWeekOfMonth", "Coding", "Indicates which week within a month the appointments in the series of recurring appointments should occur on.", 0, 1, nthWeekOfMonth));
2428          children.add(new Property("dayOfWeek", "Coding", "Indicates which day of the week the recurring appointments should occur each nth week.", 0, 1, dayOfWeek));
2429          children.add(new Property("monthInterval", "positiveInt", "Indicates that recurring appointments should occur every nth month.", 0, 1, monthInterval));
2430        }
2431
2432        @Override
2433        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2434          switch (_hash) {
2435          case -1181204563: /*dayOfMonth*/  return new Property("dayOfMonth", "positiveInt", "Indicates that appointments in the series of recurring appointments should occur on a specific day of the month.", 0, 1, dayOfMonth);
2436          case 724728723: /*nthWeekOfMonth*/  return new Property("nthWeekOfMonth", "Coding", "Indicates which week within a month the appointments in the series of recurring appointments should occur on.", 0, 1, nthWeekOfMonth);
2437          case -730552025: /*dayOfWeek*/  return new Property("dayOfWeek", "Coding", "Indicates which day of the week the recurring appointments should occur each nth week.", 0, 1, dayOfWeek);
2438          case -251401371: /*monthInterval*/  return new Property("monthInterval", "positiveInt", "Indicates that recurring appointments should occur every nth month.", 0, 1, monthInterval);
2439          default: return super.getNamedProperty(_hash, _name, _checkValid);
2440          }
2441
2442        }
2443
2444      @Override
2445      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2446        switch (hash) {
2447        case -1181204563: /*dayOfMonth*/ return this.dayOfMonth == null ? new Base[0] : new Base[] {this.dayOfMonth}; // PositiveIntType
2448        case 724728723: /*nthWeekOfMonth*/ return this.nthWeekOfMonth == null ? new Base[0] : new Base[] {this.nthWeekOfMonth}; // Coding
2449        case -730552025: /*dayOfWeek*/ return this.dayOfWeek == null ? new Base[0] : new Base[] {this.dayOfWeek}; // Coding
2450        case -251401371: /*monthInterval*/ return this.monthInterval == null ? new Base[0] : new Base[] {this.monthInterval}; // PositiveIntType
2451        default: return super.getProperty(hash, name, checkValid);
2452        }
2453
2454      }
2455
2456      @Override
2457      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2458        switch (hash) {
2459        case -1181204563: // dayOfMonth
2460          this.dayOfMonth = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2461          return value;
2462        case 724728723: // nthWeekOfMonth
2463          this.nthWeekOfMonth = TypeConvertor.castToCoding(value); // Coding
2464          return value;
2465        case -730552025: // dayOfWeek
2466          this.dayOfWeek = TypeConvertor.castToCoding(value); // Coding
2467          return value;
2468        case -251401371: // monthInterval
2469          this.monthInterval = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2470          return value;
2471        default: return super.setProperty(hash, name, value);
2472        }
2473
2474      }
2475
2476      @Override
2477      public Base setProperty(String name, Base value) throws FHIRException {
2478        if (name.equals("dayOfMonth")) {
2479          this.dayOfMonth = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2480        } else if (name.equals("nthWeekOfMonth")) {
2481          this.nthWeekOfMonth = TypeConvertor.castToCoding(value); // Coding
2482        } else if (name.equals("dayOfWeek")) {
2483          this.dayOfWeek = TypeConvertor.castToCoding(value); // Coding
2484        } else if (name.equals("monthInterval")) {
2485          this.monthInterval = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2486        } else
2487          return super.setProperty(name, value);
2488        return value;
2489      }
2490
2491      @Override
2492      public Base makeProperty(int hash, String name) throws FHIRException {
2493        switch (hash) {
2494        case -1181204563:  return getDayOfMonthElement();
2495        case 724728723:  return getNthWeekOfMonth();
2496        case -730552025:  return getDayOfWeek();
2497        case -251401371:  return getMonthIntervalElement();
2498        default: return super.makeProperty(hash, name);
2499        }
2500
2501      }
2502
2503      @Override
2504      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2505        switch (hash) {
2506        case -1181204563: /*dayOfMonth*/ return new String[] {"positiveInt"};
2507        case 724728723: /*nthWeekOfMonth*/ return new String[] {"Coding"};
2508        case -730552025: /*dayOfWeek*/ return new String[] {"Coding"};
2509        case -251401371: /*monthInterval*/ return new String[] {"positiveInt"};
2510        default: return super.getTypesForProperty(hash, name);
2511        }
2512
2513      }
2514
2515      @Override
2516      public Base addChild(String name) throws FHIRException {
2517        if (name.equals("dayOfMonth")) {
2518          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.monthlyTemplate.dayOfMonth");
2519        }
2520        else if (name.equals("nthWeekOfMonth")) {
2521          this.nthWeekOfMonth = new Coding();
2522          return this.nthWeekOfMonth;
2523        }
2524        else if (name.equals("dayOfWeek")) {
2525          this.dayOfWeek = new Coding();
2526          return this.dayOfWeek;
2527        }
2528        else if (name.equals("monthInterval")) {
2529          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.monthlyTemplate.monthInterval");
2530        }
2531        else
2532          return super.addChild(name);
2533      }
2534
2535      public AppointmentRecurrenceTemplateMonthlyTemplateComponent copy() {
2536        AppointmentRecurrenceTemplateMonthlyTemplateComponent dst = new AppointmentRecurrenceTemplateMonthlyTemplateComponent();
2537        copyValues(dst);
2538        return dst;
2539      }
2540
2541      public void copyValues(AppointmentRecurrenceTemplateMonthlyTemplateComponent dst) {
2542        super.copyValues(dst);
2543        dst.dayOfMonth = dayOfMonth == null ? null : dayOfMonth.copy();
2544        dst.nthWeekOfMonth = nthWeekOfMonth == null ? null : nthWeekOfMonth.copy();
2545        dst.dayOfWeek = dayOfWeek == null ? null : dayOfWeek.copy();
2546        dst.monthInterval = monthInterval == null ? null : monthInterval.copy();
2547      }
2548
2549      @Override
2550      public boolean equalsDeep(Base other_) {
2551        if (!super.equalsDeep(other_))
2552          return false;
2553        if (!(other_ instanceof AppointmentRecurrenceTemplateMonthlyTemplateComponent))
2554          return false;
2555        AppointmentRecurrenceTemplateMonthlyTemplateComponent o = (AppointmentRecurrenceTemplateMonthlyTemplateComponent) other_;
2556        return compareDeep(dayOfMonth, o.dayOfMonth, true) && compareDeep(nthWeekOfMonth, o.nthWeekOfMonth, true)
2557           && compareDeep(dayOfWeek, o.dayOfWeek, true) && compareDeep(monthInterval, o.monthInterval, true)
2558          ;
2559      }
2560
2561      @Override
2562      public boolean equalsShallow(Base other_) {
2563        if (!super.equalsShallow(other_))
2564          return false;
2565        if (!(other_ instanceof AppointmentRecurrenceTemplateMonthlyTemplateComponent))
2566          return false;
2567        AppointmentRecurrenceTemplateMonthlyTemplateComponent o = (AppointmentRecurrenceTemplateMonthlyTemplateComponent) other_;
2568        return compareValues(dayOfMonth, o.dayOfMonth, true) && compareValues(monthInterval, o.monthInterval, true)
2569          ;
2570      }
2571
2572      public boolean isEmpty() {
2573        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(dayOfMonth, nthWeekOfMonth
2574          , dayOfWeek, monthInterval);
2575      }
2576
2577  public String fhirType() {
2578    return "Appointment.recurrenceTemplate.monthlyTemplate";
2579
2580  }
2581
2582  }
2583
2584    @Block()
2585    public static class AppointmentRecurrenceTemplateYearlyTemplateComponent extends BackboneElement implements IBaseBackboneElement {
2586        /**
2587         * Appointment recurs every nth year.
2588         */
2589        @Child(name = "yearInterval", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2590        @Description(shortDefinition="Recurs every nth year", formalDefinition="Appointment recurs every nth year." )
2591        protected PositiveIntType yearInterval;
2592
2593        private static final long serialVersionUID = -120794476L;
2594
2595    /**
2596     * Constructor
2597     */
2598      public AppointmentRecurrenceTemplateYearlyTemplateComponent() {
2599        super();
2600      }
2601
2602    /**
2603     * Constructor
2604     */
2605      public AppointmentRecurrenceTemplateYearlyTemplateComponent(int yearInterval) {
2606        super();
2607        this.setYearInterval(yearInterval);
2608      }
2609
2610        /**
2611         * @return {@link #yearInterval} (Appointment recurs every nth year.). This is the underlying object with id, value and extensions. The accessor "getYearInterval" gives direct access to the value
2612         */
2613        public PositiveIntType getYearIntervalElement() { 
2614          if (this.yearInterval == null)
2615            if (Configuration.errorOnAutoCreate())
2616              throw new Error("Attempt to auto-create AppointmentRecurrenceTemplateYearlyTemplateComponent.yearInterval");
2617            else if (Configuration.doAutoCreate())
2618              this.yearInterval = new PositiveIntType(); // bb
2619          return this.yearInterval;
2620        }
2621
2622        public boolean hasYearIntervalElement() { 
2623          return this.yearInterval != null && !this.yearInterval.isEmpty();
2624        }
2625
2626        public boolean hasYearInterval() { 
2627          return this.yearInterval != null && !this.yearInterval.isEmpty();
2628        }
2629
2630        /**
2631         * @param value {@link #yearInterval} (Appointment recurs every nth year.). This is the underlying object with id, value and extensions. The accessor "getYearInterval" gives direct access to the value
2632         */
2633        public AppointmentRecurrenceTemplateYearlyTemplateComponent setYearIntervalElement(PositiveIntType value) { 
2634          this.yearInterval = value;
2635          return this;
2636        }
2637
2638        /**
2639         * @return Appointment recurs every nth year.
2640         */
2641        public int getYearInterval() { 
2642          return this.yearInterval == null || this.yearInterval.isEmpty() ? 0 : this.yearInterval.getValue();
2643        }
2644
2645        /**
2646         * @param value Appointment recurs every nth year.
2647         */
2648        public AppointmentRecurrenceTemplateYearlyTemplateComponent setYearInterval(int value) { 
2649            if (this.yearInterval == null)
2650              this.yearInterval = new PositiveIntType();
2651            this.yearInterval.setValue(value);
2652          return this;
2653        }
2654
2655        protected void listChildren(List<Property> children) {
2656          super.listChildren(children);
2657          children.add(new Property("yearInterval", "positiveInt", "Appointment recurs every nth year.", 0, 1, yearInterval));
2658        }
2659
2660        @Override
2661        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2662          switch (_hash) {
2663          case 492389410: /*yearInterval*/  return new Property("yearInterval", "positiveInt", "Appointment recurs every nth year.", 0, 1, yearInterval);
2664          default: return super.getNamedProperty(_hash, _name, _checkValid);
2665          }
2666
2667        }
2668
2669      @Override
2670      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2671        switch (hash) {
2672        case 492389410: /*yearInterval*/ return this.yearInterval == null ? new Base[0] : new Base[] {this.yearInterval}; // PositiveIntType
2673        default: return super.getProperty(hash, name, checkValid);
2674        }
2675
2676      }
2677
2678      @Override
2679      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2680        switch (hash) {
2681        case 492389410: // yearInterval
2682          this.yearInterval = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2683          return value;
2684        default: return super.setProperty(hash, name, value);
2685        }
2686
2687      }
2688
2689      @Override
2690      public Base setProperty(String name, Base value) throws FHIRException {
2691        if (name.equals("yearInterval")) {
2692          this.yearInterval = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2693        } else
2694          return super.setProperty(name, value);
2695        return value;
2696      }
2697
2698      @Override
2699      public Base makeProperty(int hash, String name) throws FHIRException {
2700        switch (hash) {
2701        case 492389410:  return getYearIntervalElement();
2702        default: return super.makeProperty(hash, name);
2703        }
2704
2705      }
2706
2707      @Override
2708      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2709        switch (hash) {
2710        case 492389410: /*yearInterval*/ return new String[] {"positiveInt"};
2711        default: return super.getTypesForProperty(hash, name);
2712        }
2713
2714      }
2715
2716      @Override
2717      public Base addChild(String name) throws FHIRException {
2718        if (name.equals("yearInterval")) {
2719          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceTemplate.yearlyTemplate.yearInterval");
2720        }
2721        else
2722          return super.addChild(name);
2723      }
2724
2725      public AppointmentRecurrenceTemplateYearlyTemplateComponent copy() {
2726        AppointmentRecurrenceTemplateYearlyTemplateComponent dst = new AppointmentRecurrenceTemplateYearlyTemplateComponent();
2727        copyValues(dst);
2728        return dst;
2729      }
2730
2731      public void copyValues(AppointmentRecurrenceTemplateYearlyTemplateComponent dst) {
2732        super.copyValues(dst);
2733        dst.yearInterval = yearInterval == null ? null : yearInterval.copy();
2734      }
2735
2736      @Override
2737      public boolean equalsDeep(Base other_) {
2738        if (!super.equalsDeep(other_))
2739          return false;
2740        if (!(other_ instanceof AppointmentRecurrenceTemplateYearlyTemplateComponent))
2741          return false;
2742        AppointmentRecurrenceTemplateYearlyTemplateComponent o = (AppointmentRecurrenceTemplateYearlyTemplateComponent) other_;
2743        return compareDeep(yearInterval, o.yearInterval, true);
2744      }
2745
2746      @Override
2747      public boolean equalsShallow(Base other_) {
2748        if (!super.equalsShallow(other_))
2749          return false;
2750        if (!(other_ instanceof AppointmentRecurrenceTemplateYearlyTemplateComponent))
2751          return false;
2752        AppointmentRecurrenceTemplateYearlyTemplateComponent o = (AppointmentRecurrenceTemplateYearlyTemplateComponent) other_;
2753        return compareValues(yearInterval, o.yearInterval, true);
2754      }
2755
2756      public boolean isEmpty() {
2757        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(yearInterval);
2758      }
2759
2760  public String fhirType() {
2761    return "Appointment.recurrenceTemplate.yearlyTemplate";
2762
2763  }
2764
2765  }
2766
2767    /**
2768     * This records identifiers associated with this appointment concern 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 (e.g. in CDA documents, or in written / printed documentation).
2769     */
2770    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2771    @Description(shortDefinition="External Ids for this item", formalDefinition="This records identifiers associated with this appointment concern 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 (e.g. in CDA documents, or in written / printed documentation)." )
2772    protected List<Identifier> identifier;
2773
2774    /**
2775     * The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.
2776     */
2777    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
2778    @Description(shortDefinition="proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist", formalDefinition="The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status." )
2779    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/appointmentstatus")
2780    protected Enumeration<AppointmentStatus> status;
2781
2782    /**
2783     * The coded reason for the appointment being cancelled. This is often used in reporting/billing/futher processing to determine if further actions are required, or specific fees apply.
2784     */
2785    @Child(name = "cancellationReason", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
2786    @Description(shortDefinition="The coded reason for the appointment being cancelled", formalDefinition="The coded reason for the appointment being cancelled. This is often used in reporting/billing/futher processing to determine if further actions are required, or specific fees apply." )
2787    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/appointment-cancellation-reason")
2788    protected CodeableConcept cancellationReason;
2789
2790    /**
2791     * Concepts representing classification of patient encounter such as ambulatory (outpatient), inpatient, emergency, home health or others due to local variations.
2792     */
2793    @Child(name = "class", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2794    @Description(shortDefinition="Classification when becoming an encounter", formalDefinition="Concepts representing classification of patient encounter such as ambulatory (outpatient), inpatient, emergency, home health or others due to local variations." )
2795    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/EncounterClass")
2796    protected List<CodeableConcept> class_;
2797
2798    /**
2799     * A broad categorization of the service that is to be performed during this appointment.
2800     */
2801    @Child(name = "serviceCategory", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2802    @Description(shortDefinition="A broad categorization of the service that is to be performed during this appointment", formalDefinition="A broad categorization of the service that is to be performed during this appointment." )
2803    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-category")
2804    protected List<CodeableConcept> serviceCategory;
2805
2806    /**
2807     * The specific service that is to be performed during this appointment.
2808     */
2809    @Child(name = "serviceType", type = {CodeableReference.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2810    @Description(shortDefinition="The specific service that is to be performed during this appointment", formalDefinition="The specific service that is to be performed during this appointment." )
2811    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-type")
2812    protected List<CodeableReference> serviceType;
2813
2814    /**
2815     * The specialty of a practitioner that would be required to perform the service requested in this appointment.
2816     */
2817    @Child(name = "specialty", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2818    @Description(shortDefinition="The specialty of a practitioner that would be required to perform the service requested in this appointment", formalDefinition="The specialty of a practitioner that would be required to perform the service requested in this appointment." )
2819    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/c80-practice-codes")
2820    protected List<CodeableConcept> specialty;
2821
2822    /**
2823     * The style of appointment or patient that has been booked in the slot (not service type).
2824     */
2825    @Child(name = "appointmentType", type = {CodeableConcept.class}, order=7, min=0, max=1, modifier=false, summary=true)
2826    @Description(shortDefinition="The style of appointment or patient that has been booked in the slot (not service type)", formalDefinition="The style of appointment or patient that has been booked in the slot (not service type)." )
2827    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v2-0276")
2828    protected CodeableConcept appointmentType;
2829
2830    /**
2831     * The reason that this appointment is being scheduled. This is more clinical than administrative. This can be coded, or as specified using information from another resource. When the patient arrives and the encounter begins it may be used as the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure.
2832     */
2833    @Child(name = "reason", type = {CodeableReference.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2834    @Description(shortDefinition="Reason this appointment is scheduled", formalDefinition="The reason that this appointment is being scheduled. This is more clinical than administrative. This can be coded, or as specified using information from another resource. When the patient arrives and the encounter begins it may be used as the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure." )
2835    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/encounter-reason")
2836    protected List<CodeableReference> reason;
2837
2838    /**
2839     * The priority of the appointment. Can be used to make informed decisions if needing to re-prioritize appointments. (The iCal Standard specifies 0 as undefined, 1 as highest, 9 as lowest priority).
2840     */
2841    @Child(name = "priority", type = {CodeableConcept.class}, order=9, min=0, max=1, modifier=false, summary=false)
2842    @Description(shortDefinition="Used to make informed decisions if needing to re-prioritize", formalDefinition="The priority of the appointment. Can be used to make informed decisions if needing to re-prioritize appointments. (The iCal Standard specifies 0 as undefined, 1 as highest, 9 as lowest priority)." )
2843    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-ActPriority")
2844    protected CodeableConcept priority;
2845
2846    /**
2847     * The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the note field.
2848     */
2849    @Child(name = "description", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
2850    @Description(shortDefinition="Shown on a subject line in a meeting request, or appointment list", formalDefinition="The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the note field." )
2851    protected StringType description;
2852
2853    /**
2854     * Appointment replaced by this Appointment in cases where there is a cancellation, the details of the cancellation can be found in the cancellationReason property (on the referenced resource).
2855     */
2856    @Child(name = "replaces", type = {Appointment.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2857    @Description(shortDefinition="Appointment replaced by this Appointment", formalDefinition="Appointment replaced by this Appointment in cases where there is a cancellation, the details of the cancellation can be found in the cancellationReason property (on the referenced resource)." )
2858    protected List<Reference> replaces;
2859
2860    /**
2861     * Connection details of a virtual service (e.g. conference call).
2862     */
2863    @Child(name = "virtualService", type = {VirtualServiceDetail.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2864    @Description(shortDefinition="Connection details of a virtual service (e.g. conference call)", formalDefinition="Connection details of a virtual service (e.g. conference call)." )
2865    protected List<VirtualServiceDetail> virtualService;
2866
2867    /**
2868     * Additional information to support the appointment provided when making the appointment.
2869     */
2870    @Child(name = "supportingInformation", type = {Reference.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2871    @Description(shortDefinition="Additional information to support the appointment", formalDefinition="Additional information to support the appointment provided when making the appointment." )
2872    protected List<Reference> supportingInformation;
2873
2874    /**
2875     * The previous appointment in a series of related appointments.
2876     */
2877    @Child(name = "previousAppointment", type = {Appointment.class}, order=14, min=0, max=1, modifier=false, summary=false)
2878    @Description(shortDefinition="The previous appointment in a series", formalDefinition="The previous appointment in a series of related appointments." )
2879    protected Reference previousAppointment;
2880
2881    /**
2882     * The originating appointment in a recurring set of related appointments.
2883     */
2884    @Child(name = "originatingAppointment", type = {Appointment.class}, order=15, min=0, max=1, modifier=false, summary=false)
2885    @Description(shortDefinition="The originating appointment in a recurring set of appointments", formalDefinition="The originating appointment in a recurring set of related appointments." )
2886    protected Reference originatingAppointment;
2887
2888    /**
2889     * Date/Time that the appointment is to take place.
2890     */
2891    @Child(name = "start", type = {InstantType.class}, order=16, min=0, max=1, modifier=false, summary=true)
2892    @Description(shortDefinition="When appointment is to take place", formalDefinition="Date/Time that the appointment is to take place." )
2893    protected InstantType start;
2894
2895    /**
2896     * Date/Time that the appointment is to conclude.
2897     */
2898    @Child(name = "end", type = {InstantType.class}, order=17, min=0, max=1, modifier=false, summary=true)
2899    @Description(shortDefinition="When appointment is to conclude", formalDefinition="Date/Time that the appointment is to conclude." )
2900    protected InstantType end;
2901
2902    /**
2903     * Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.
2904     */
2905    @Child(name = "minutesDuration", type = {PositiveIntType.class}, order=18, min=0, max=1, modifier=false, summary=false)
2906    @Description(shortDefinition="Can be less than start/end (e.g. estimate)", formalDefinition="Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end." )
2907    protected PositiveIntType minutesDuration;
2908
2909    /**
2910     * A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within.
2911
2912The duration (usually in minutes) could also be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time. However, in other situations the duration may be calculated by the scheduling system.
2913     */
2914    @Child(name = "requestedPeriod", type = {Period.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2915    @Description(shortDefinition="Potential date/time interval(s) requested to allocate the appointment within", formalDefinition="A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within.\n\nThe duration (usually in minutes) could also be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time. However, in other situations the duration may be calculated by the scheduling system." )
2916    protected List<Period> requestedPeriod;
2917
2918    /**
2919     * The slots from the participants' schedules that will be filled by the appointment.
2920     */
2921    @Child(name = "slot", type = {Slot.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2922    @Description(shortDefinition="The slots that this appointment is filling", formalDefinition="The slots from the participants' schedules that will be filled by the appointment." )
2923    protected List<Reference> slot;
2924
2925    /**
2926     * The set of accounts that is expected to be used for billing the activities that result from this Appointment.
2927     */
2928    @Child(name = "account", type = {Account.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2929    @Description(shortDefinition="The set of accounts that may be used for billing for this Appointment", formalDefinition="The set of accounts that is expected to be used for billing the activities that result from this Appointment." )
2930    protected List<Reference> account;
2931
2932    /**
2933     * The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.
2934     */
2935    @Child(name = "created", type = {DateTimeType.class}, order=22, min=0, max=1, modifier=false, summary=false)
2936    @Description(shortDefinition="The date that this appointment was initially created", formalDefinition="The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment." )
2937    protected DateTimeType created;
2938
2939    /**
2940     * The date/time describing when the appointment was cancelled.
2941     */
2942    @Child(name = "cancellationDate", type = {DateTimeType.class}, order=23, min=0, max=1, modifier=false, summary=false)
2943    @Description(shortDefinition="When the appointment was cancelled", formalDefinition="The date/time describing when the appointment was cancelled." )
2944    protected DateTimeType cancellationDate;
2945
2946    /**
2947     * Additional notes/comments about the appointment.
2948     */
2949    @Child(name = "note", type = {Annotation.class}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2950    @Description(shortDefinition="Additional comments", formalDefinition="Additional notes/comments about the appointment." )
2951    protected List<Annotation> note;
2952
2953    /**
2954     * While Appointment.note contains information for internal use, Appointment.patientInstructions is used to capture patient facing information about the Appointment (e.g. please bring your referral or fast from 8pm night before).
2955     */
2956    @Child(name = "patientInstruction", type = {CodeableReference.class}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2957    @Description(shortDefinition="Detailed information and instructions for the patient", formalDefinition="While Appointment.note contains information for internal use, Appointment.patientInstructions is used to capture patient facing information about the Appointment (e.g. please bring your referral or fast from 8pm night before)." )
2958    protected List<CodeableReference> patientInstruction;
2959
2960    /**
2961     * The request this appointment is allocated to assess (e.g. incoming referral or procedure request).
2962     */
2963    @Child(name = "basedOn", type = {CarePlan.class, DeviceRequest.class, MedicationRequest.class, ServiceRequest.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2964    @Description(shortDefinition="The request this appointment is allocated to assess", formalDefinition="The request this appointment is allocated to assess (e.g. incoming referral or procedure request)." )
2965    protected List<Reference> basedOn;
2966
2967    /**
2968     * The patient or group associated with the appointment, if they are to be present (usually) then they should also be included in the participant backbone element.
2969     */
2970    @Child(name = "subject", type = {Patient.class, Group.class}, order=27, min=0, max=1, modifier=false, summary=true)
2971    @Description(shortDefinition="The patient or group associated with the appointment", formalDefinition="The patient or group associated with the appointment, if they are to be present (usually) then they should also be included in the participant backbone element." )
2972    protected Reference subject;
2973
2974    /**
2975     * List of participants involved in the appointment.
2976     */
2977    @Child(name = "participant", type = {}, order=28, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2978    @Description(shortDefinition="Participants involved in appointment", formalDefinition="List of participants involved in the appointment." )
2979    protected List<AppointmentParticipantComponent> participant;
2980
2981    /**
2982     * The sequence number that identifies a specific appointment in a recurring pattern.
2983     */
2984    @Child(name = "recurrenceId", type = {PositiveIntType.class}, order=29, min=0, max=1, modifier=false, summary=false)
2985    @Description(shortDefinition="The sequence number in the recurrence", formalDefinition="The sequence number that identifies a specific appointment in a recurring pattern." )
2986    protected PositiveIntType recurrenceId;
2987
2988    /**
2989     * This appointment varies from the recurring pattern.
2990     */
2991    @Child(name = "occurrenceChanged", type = {BooleanType.class}, order=30, min=0, max=1, modifier=false, summary=false)
2992    @Description(shortDefinition="Indicates that this appointment varies from a recurrence pattern", formalDefinition="This appointment varies from the recurring pattern." )
2993    protected BooleanType occurrenceChanged;
2994
2995    /**
2996     * The details of the recurrence pattern or template that is used to generate recurring appointments.
2997     */
2998    @Child(name = "recurrenceTemplate", type = {}, order=31, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2999    @Description(shortDefinition="Details of the recurrence pattern/template used to generate occurrences", formalDefinition="The details of the recurrence pattern or template that is used to generate recurring appointments." )
3000    protected List<AppointmentRecurrenceTemplateComponent> recurrenceTemplate;
3001
3002    private static final long serialVersionUID = 883088259L;
3003
3004  /**
3005   * Constructor
3006   */
3007    public Appointment() {
3008      super();
3009    }
3010
3011  /**
3012   * Constructor
3013   */
3014    public Appointment(AppointmentStatus status, AppointmentParticipantComponent participant) {
3015      super();
3016      this.setStatus(status);
3017      this.addParticipant(participant);
3018    }
3019
3020    /**
3021     * @return {@link #identifier} (This records identifiers associated with this appointment concern 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 (e.g. in CDA documents, or in written / printed documentation).)
3022     */
3023    public List<Identifier> getIdentifier() { 
3024      if (this.identifier == null)
3025        this.identifier = new ArrayList<Identifier>();
3026      return this.identifier;
3027    }
3028
3029    /**
3030     * @return Returns a reference to <code>this</code> for easy method chaining
3031     */
3032    public Appointment setIdentifier(List<Identifier> theIdentifier) { 
3033      this.identifier = theIdentifier;
3034      return this;
3035    }
3036
3037    public boolean hasIdentifier() { 
3038      if (this.identifier == null)
3039        return false;
3040      for (Identifier item : this.identifier)
3041        if (!item.isEmpty())
3042          return true;
3043      return false;
3044    }
3045
3046    public Identifier addIdentifier() { //3
3047      Identifier t = new Identifier();
3048      if (this.identifier == null)
3049        this.identifier = new ArrayList<Identifier>();
3050      this.identifier.add(t);
3051      return t;
3052    }
3053
3054    public Appointment addIdentifier(Identifier t) { //3
3055      if (t == null)
3056        return this;
3057      if (this.identifier == null)
3058        this.identifier = new ArrayList<Identifier>();
3059      this.identifier.add(t);
3060      return this;
3061    }
3062
3063    /**
3064     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
3065     */
3066    public Identifier getIdentifierFirstRep() { 
3067      if (getIdentifier().isEmpty()) {
3068        addIdentifier();
3069      }
3070      return getIdentifier().get(0);
3071    }
3072
3073    /**
3074     * @return {@link #status} (The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3075     */
3076    public Enumeration<AppointmentStatus> getStatusElement() { 
3077      if (this.status == null)
3078        if (Configuration.errorOnAutoCreate())
3079          throw new Error("Attempt to auto-create Appointment.status");
3080        else if (Configuration.doAutoCreate())
3081          this.status = new Enumeration<AppointmentStatus>(new AppointmentStatusEnumFactory()); // bb
3082      return this.status;
3083    }
3084
3085    public boolean hasStatusElement() { 
3086      return this.status != null && !this.status.isEmpty();
3087    }
3088
3089    public boolean hasStatus() { 
3090      return this.status != null && !this.status.isEmpty();
3091    }
3092
3093    /**
3094     * @param value {@link #status} (The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3095     */
3096    public Appointment setStatusElement(Enumeration<AppointmentStatus> value) { 
3097      this.status = value;
3098      return this;
3099    }
3100
3101    /**
3102     * @return The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.
3103     */
3104    public AppointmentStatus getStatus() { 
3105      return this.status == null ? null : this.status.getValue();
3106    }
3107
3108    /**
3109     * @param value The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.
3110     */
3111    public Appointment setStatus(AppointmentStatus value) { 
3112        if (this.status == null)
3113          this.status = new Enumeration<AppointmentStatus>(new AppointmentStatusEnumFactory());
3114        this.status.setValue(value);
3115      return this;
3116    }
3117
3118    /**
3119     * @return {@link #cancellationReason} (The coded reason for the appointment being cancelled. This is often used in reporting/billing/futher processing to determine if further actions are required, or specific fees apply.)
3120     */
3121    public CodeableConcept getCancellationReason() { 
3122      if (this.cancellationReason == null)
3123        if (Configuration.errorOnAutoCreate())
3124          throw new Error("Attempt to auto-create Appointment.cancellationReason");
3125        else if (Configuration.doAutoCreate())
3126          this.cancellationReason = new CodeableConcept(); // cc
3127      return this.cancellationReason;
3128    }
3129
3130    public boolean hasCancellationReason() { 
3131      return this.cancellationReason != null && !this.cancellationReason.isEmpty();
3132    }
3133
3134    /**
3135     * @param value {@link #cancellationReason} (The coded reason for the appointment being cancelled. This is often used in reporting/billing/futher processing to determine if further actions are required, or specific fees apply.)
3136     */
3137    public Appointment setCancellationReason(CodeableConcept value) { 
3138      this.cancellationReason = value;
3139      return this;
3140    }
3141
3142    /**
3143     * @return {@link #class_} (Concepts representing classification of patient encounter such as ambulatory (outpatient), inpatient, emergency, home health or others due to local variations.)
3144     */
3145    public List<CodeableConcept> getClass_() { 
3146      if (this.class_ == null)
3147        this.class_ = new ArrayList<CodeableConcept>();
3148      return this.class_;
3149    }
3150
3151    /**
3152     * @return Returns a reference to <code>this</code> for easy method chaining
3153     */
3154    public Appointment setClass_(List<CodeableConcept> theClass_) { 
3155      this.class_ = theClass_;
3156      return this;
3157    }
3158
3159    public boolean hasClass_() { 
3160      if (this.class_ == null)
3161        return false;
3162      for (CodeableConcept item : this.class_)
3163        if (!item.isEmpty())
3164          return true;
3165      return false;
3166    }
3167
3168    public CodeableConcept addClass_() { //3
3169      CodeableConcept t = new CodeableConcept();
3170      if (this.class_ == null)
3171        this.class_ = new ArrayList<CodeableConcept>();
3172      this.class_.add(t);
3173      return t;
3174    }
3175
3176    public Appointment addClass_(CodeableConcept t) { //3
3177      if (t == null)
3178        return this;
3179      if (this.class_ == null)
3180        this.class_ = new ArrayList<CodeableConcept>();
3181      this.class_.add(t);
3182      return this;
3183    }
3184
3185    /**
3186     * @return The first repetition of repeating field {@link #class_}, creating it if it does not already exist {3}
3187     */
3188    public CodeableConcept getClass_FirstRep() { 
3189      if (getClass_().isEmpty()) {
3190        addClass_();
3191      }
3192      return getClass_().get(0);
3193    }
3194
3195    /**
3196     * @return {@link #serviceCategory} (A broad categorization of the service that is to be performed during this appointment.)
3197     */
3198    public List<CodeableConcept> getServiceCategory() { 
3199      if (this.serviceCategory == null)
3200        this.serviceCategory = new ArrayList<CodeableConcept>();
3201      return this.serviceCategory;
3202    }
3203
3204    /**
3205     * @return Returns a reference to <code>this</code> for easy method chaining
3206     */
3207    public Appointment setServiceCategory(List<CodeableConcept> theServiceCategory) { 
3208      this.serviceCategory = theServiceCategory;
3209      return this;
3210    }
3211
3212    public boolean hasServiceCategory() { 
3213      if (this.serviceCategory == null)
3214        return false;
3215      for (CodeableConcept item : this.serviceCategory)
3216        if (!item.isEmpty())
3217          return true;
3218      return false;
3219    }
3220
3221    public CodeableConcept addServiceCategory() { //3
3222      CodeableConcept t = new CodeableConcept();
3223      if (this.serviceCategory == null)
3224        this.serviceCategory = new ArrayList<CodeableConcept>();
3225      this.serviceCategory.add(t);
3226      return t;
3227    }
3228
3229    public Appointment addServiceCategory(CodeableConcept t) { //3
3230      if (t == null)
3231        return this;
3232      if (this.serviceCategory == null)
3233        this.serviceCategory = new ArrayList<CodeableConcept>();
3234      this.serviceCategory.add(t);
3235      return this;
3236    }
3237
3238    /**
3239     * @return The first repetition of repeating field {@link #serviceCategory}, creating it if it does not already exist {3}
3240     */
3241    public CodeableConcept getServiceCategoryFirstRep() { 
3242      if (getServiceCategory().isEmpty()) {
3243        addServiceCategory();
3244      }
3245      return getServiceCategory().get(0);
3246    }
3247
3248    /**
3249     * @return {@link #serviceType} (The specific service that is to be performed during this appointment.)
3250     */
3251    public List<CodeableReference> getServiceType() { 
3252      if (this.serviceType == null)
3253        this.serviceType = new ArrayList<CodeableReference>();
3254      return this.serviceType;
3255    }
3256
3257    /**
3258     * @return Returns a reference to <code>this</code> for easy method chaining
3259     */
3260    public Appointment setServiceType(List<CodeableReference> theServiceType) { 
3261      this.serviceType = theServiceType;
3262      return this;
3263    }
3264
3265    public boolean hasServiceType() { 
3266      if (this.serviceType == null)
3267        return false;
3268      for (CodeableReference item : this.serviceType)
3269        if (!item.isEmpty())
3270          return true;
3271      return false;
3272    }
3273
3274    public CodeableReference addServiceType() { //3
3275      CodeableReference t = new CodeableReference();
3276      if (this.serviceType == null)
3277        this.serviceType = new ArrayList<CodeableReference>();
3278      this.serviceType.add(t);
3279      return t;
3280    }
3281
3282    public Appointment addServiceType(CodeableReference t) { //3
3283      if (t == null)
3284        return this;
3285      if (this.serviceType == null)
3286        this.serviceType = new ArrayList<CodeableReference>();
3287      this.serviceType.add(t);
3288      return this;
3289    }
3290
3291    /**
3292     * @return The first repetition of repeating field {@link #serviceType}, creating it if it does not already exist {3}
3293     */
3294    public CodeableReference getServiceTypeFirstRep() { 
3295      if (getServiceType().isEmpty()) {
3296        addServiceType();
3297      }
3298      return getServiceType().get(0);
3299    }
3300
3301    /**
3302     * @return {@link #specialty} (The specialty of a practitioner that would be required to perform the service requested in this appointment.)
3303     */
3304    public List<CodeableConcept> getSpecialty() { 
3305      if (this.specialty == null)
3306        this.specialty = new ArrayList<CodeableConcept>();
3307      return this.specialty;
3308    }
3309
3310    /**
3311     * @return Returns a reference to <code>this</code> for easy method chaining
3312     */
3313    public Appointment setSpecialty(List<CodeableConcept> theSpecialty) { 
3314      this.specialty = theSpecialty;
3315      return this;
3316    }
3317
3318    public boolean hasSpecialty() { 
3319      if (this.specialty == null)
3320        return false;
3321      for (CodeableConcept item : this.specialty)
3322        if (!item.isEmpty())
3323          return true;
3324      return false;
3325    }
3326
3327    public CodeableConcept addSpecialty() { //3
3328      CodeableConcept t = new CodeableConcept();
3329      if (this.specialty == null)
3330        this.specialty = new ArrayList<CodeableConcept>();
3331      this.specialty.add(t);
3332      return t;
3333    }
3334
3335    public Appointment addSpecialty(CodeableConcept t) { //3
3336      if (t == null)
3337        return this;
3338      if (this.specialty == null)
3339        this.specialty = new ArrayList<CodeableConcept>();
3340      this.specialty.add(t);
3341      return this;
3342    }
3343
3344    /**
3345     * @return The first repetition of repeating field {@link #specialty}, creating it if it does not already exist {3}
3346     */
3347    public CodeableConcept getSpecialtyFirstRep() { 
3348      if (getSpecialty().isEmpty()) {
3349        addSpecialty();
3350      }
3351      return getSpecialty().get(0);
3352    }
3353
3354    /**
3355     * @return {@link #appointmentType} (The style of appointment or patient that has been booked in the slot (not service type).)
3356     */
3357    public CodeableConcept getAppointmentType() { 
3358      if (this.appointmentType == null)
3359        if (Configuration.errorOnAutoCreate())
3360          throw new Error("Attempt to auto-create Appointment.appointmentType");
3361        else if (Configuration.doAutoCreate())
3362          this.appointmentType = new CodeableConcept(); // cc
3363      return this.appointmentType;
3364    }
3365
3366    public boolean hasAppointmentType() { 
3367      return this.appointmentType != null && !this.appointmentType.isEmpty();
3368    }
3369
3370    /**
3371     * @param value {@link #appointmentType} (The style of appointment or patient that has been booked in the slot (not service type).)
3372     */
3373    public Appointment setAppointmentType(CodeableConcept value) { 
3374      this.appointmentType = value;
3375      return this;
3376    }
3377
3378    /**
3379     * @return {@link #reason} (The reason that this appointment is being scheduled. This is more clinical than administrative. This can be coded, or as specified using information from another resource. When the patient arrives and the encounter begins it may be used as the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure.)
3380     */
3381    public List<CodeableReference> getReason() { 
3382      if (this.reason == null)
3383        this.reason = new ArrayList<CodeableReference>();
3384      return this.reason;
3385    }
3386
3387    /**
3388     * @return Returns a reference to <code>this</code> for easy method chaining
3389     */
3390    public Appointment setReason(List<CodeableReference> theReason) { 
3391      this.reason = theReason;
3392      return this;
3393    }
3394
3395    public boolean hasReason() { 
3396      if (this.reason == null)
3397        return false;
3398      for (CodeableReference item : this.reason)
3399        if (!item.isEmpty())
3400          return true;
3401      return false;
3402    }
3403
3404    public CodeableReference addReason() { //3
3405      CodeableReference t = new CodeableReference();
3406      if (this.reason == null)
3407        this.reason = new ArrayList<CodeableReference>();
3408      this.reason.add(t);
3409      return t;
3410    }
3411
3412    public Appointment addReason(CodeableReference t) { //3
3413      if (t == null)
3414        return this;
3415      if (this.reason == null)
3416        this.reason = new ArrayList<CodeableReference>();
3417      this.reason.add(t);
3418      return this;
3419    }
3420
3421    /**
3422     * @return The first repetition of repeating field {@link #reason}, creating it if it does not already exist {3}
3423     */
3424    public CodeableReference getReasonFirstRep() { 
3425      if (getReason().isEmpty()) {
3426        addReason();
3427      }
3428      return getReason().get(0);
3429    }
3430
3431    /**
3432     * @return {@link #priority} (The priority of the appointment. Can be used to make informed decisions if needing to re-prioritize appointments. (The iCal Standard specifies 0 as undefined, 1 as highest, 9 as lowest priority).)
3433     */
3434    public CodeableConcept getPriority() { 
3435      if (this.priority == null)
3436        if (Configuration.errorOnAutoCreate())
3437          throw new Error("Attempt to auto-create Appointment.priority");
3438        else if (Configuration.doAutoCreate())
3439          this.priority = new CodeableConcept(); // cc
3440      return this.priority;
3441    }
3442
3443    public boolean hasPriority() { 
3444      return this.priority != null && !this.priority.isEmpty();
3445    }
3446
3447    /**
3448     * @param value {@link #priority} (The priority of the appointment. Can be used to make informed decisions if needing to re-prioritize appointments. (The iCal Standard specifies 0 as undefined, 1 as highest, 9 as lowest priority).)
3449     */
3450    public Appointment setPriority(CodeableConcept value) { 
3451      this.priority = value;
3452      return this;
3453    }
3454
3455    /**
3456     * @return {@link #description} (The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the note field.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
3457     */
3458    public StringType getDescriptionElement() { 
3459      if (this.description == null)
3460        if (Configuration.errorOnAutoCreate())
3461          throw new Error("Attempt to auto-create Appointment.description");
3462        else if (Configuration.doAutoCreate())
3463          this.description = new StringType(); // bb
3464      return this.description;
3465    }
3466
3467    public boolean hasDescriptionElement() { 
3468      return this.description != null && !this.description.isEmpty();
3469    }
3470
3471    public boolean hasDescription() { 
3472      return this.description != null && !this.description.isEmpty();
3473    }
3474
3475    /**
3476     * @param value {@link #description} (The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the note field.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
3477     */
3478    public Appointment setDescriptionElement(StringType value) { 
3479      this.description = value;
3480      return this;
3481    }
3482
3483    /**
3484     * @return The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the note field.
3485     */
3486    public String getDescription() { 
3487      return this.description == null ? null : this.description.getValue();
3488    }
3489
3490    /**
3491     * @param value The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the note field.
3492     */
3493    public Appointment setDescription(String value) { 
3494      if (Utilities.noString(value))
3495        this.description = null;
3496      else {
3497        if (this.description == null)
3498          this.description = new StringType();
3499        this.description.setValue(value);
3500      }
3501      return this;
3502    }
3503
3504    /**
3505     * @return {@link #replaces} (Appointment replaced by this Appointment in cases where there is a cancellation, the details of the cancellation can be found in the cancellationReason property (on the referenced resource).)
3506     */
3507    public List<Reference> getReplaces() { 
3508      if (this.replaces == null)
3509        this.replaces = new ArrayList<Reference>();
3510      return this.replaces;
3511    }
3512
3513    /**
3514     * @return Returns a reference to <code>this</code> for easy method chaining
3515     */
3516    public Appointment setReplaces(List<Reference> theReplaces) { 
3517      this.replaces = theReplaces;
3518      return this;
3519    }
3520
3521    public boolean hasReplaces() { 
3522      if (this.replaces == null)
3523        return false;
3524      for (Reference item : this.replaces)
3525        if (!item.isEmpty())
3526          return true;
3527      return false;
3528    }
3529
3530    public Reference addReplaces() { //3
3531      Reference t = new Reference();
3532      if (this.replaces == null)
3533        this.replaces = new ArrayList<Reference>();
3534      this.replaces.add(t);
3535      return t;
3536    }
3537
3538    public Appointment addReplaces(Reference t) { //3
3539      if (t == null)
3540        return this;
3541      if (this.replaces == null)
3542        this.replaces = new ArrayList<Reference>();
3543      this.replaces.add(t);
3544      return this;
3545    }
3546
3547    /**
3548     * @return The first repetition of repeating field {@link #replaces}, creating it if it does not already exist {3}
3549     */
3550    public Reference getReplacesFirstRep() { 
3551      if (getReplaces().isEmpty()) {
3552        addReplaces();
3553      }
3554      return getReplaces().get(0);
3555    }
3556
3557    /**
3558     * @return {@link #virtualService} (Connection details of a virtual service (e.g. conference call).)
3559     */
3560    public List<VirtualServiceDetail> getVirtualService() { 
3561      if (this.virtualService == null)
3562        this.virtualService = new ArrayList<VirtualServiceDetail>();
3563      return this.virtualService;
3564    }
3565
3566    /**
3567     * @return Returns a reference to <code>this</code> for easy method chaining
3568     */
3569    public Appointment setVirtualService(List<VirtualServiceDetail> theVirtualService) { 
3570      this.virtualService = theVirtualService;
3571      return this;
3572    }
3573
3574    public boolean hasVirtualService() { 
3575      if (this.virtualService == null)
3576        return false;
3577      for (VirtualServiceDetail item : this.virtualService)
3578        if (!item.isEmpty())
3579          return true;
3580      return false;
3581    }
3582
3583    public VirtualServiceDetail addVirtualService() { //3
3584      VirtualServiceDetail t = new VirtualServiceDetail();
3585      if (this.virtualService == null)
3586        this.virtualService = new ArrayList<VirtualServiceDetail>();
3587      this.virtualService.add(t);
3588      return t;
3589    }
3590
3591    public Appointment addVirtualService(VirtualServiceDetail t) { //3
3592      if (t == null)
3593        return this;
3594      if (this.virtualService == null)
3595        this.virtualService = new ArrayList<VirtualServiceDetail>();
3596      this.virtualService.add(t);
3597      return this;
3598    }
3599
3600    /**
3601     * @return The first repetition of repeating field {@link #virtualService}, creating it if it does not already exist {3}
3602     */
3603    public VirtualServiceDetail getVirtualServiceFirstRep() { 
3604      if (getVirtualService().isEmpty()) {
3605        addVirtualService();
3606      }
3607      return getVirtualService().get(0);
3608    }
3609
3610    /**
3611     * @return {@link #supportingInformation} (Additional information to support the appointment provided when making the appointment.)
3612     */
3613    public List<Reference> getSupportingInformation() { 
3614      if (this.supportingInformation == null)
3615        this.supportingInformation = new ArrayList<Reference>();
3616      return this.supportingInformation;
3617    }
3618
3619    /**
3620     * @return Returns a reference to <code>this</code> for easy method chaining
3621     */
3622    public Appointment setSupportingInformation(List<Reference> theSupportingInformation) { 
3623      this.supportingInformation = theSupportingInformation;
3624      return this;
3625    }
3626
3627    public boolean hasSupportingInformation() { 
3628      if (this.supportingInformation == null)
3629        return false;
3630      for (Reference item : this.supportingInformation)
3631        if (!item.isEmpty())
3632          return true;
3633      return false;
3634    }
3635
3636    public Reference addSupportingInformation() { //3
3637      Reference t = new Reference();
3638      if (this.supportingInformation == null)
3639        this.supportingInformation = new ArrayList<Reference>();
3640      this.supportingInformation.add(t);
3641      return t;
3642    }
3643
3644    public Appointment addSupportingInformation(Reference t) { //3
3645      if (t == null)
3646        return this;
3647      if (this.supportingInformation == null)
3648        this.supportingInformation = new ArrayList<Reference>();
3649      this.supportingInformation.add(t);
3650      return this;
3651    }
3652
3653    /**
3654     * @return The first repetition of repeating field {@link #supportingInformation}, creating it if it does not already exist {3}
3655     */
3656    public Reference getSupportingInformationFirstRep() { 
3657      if (getSupportingInformation().isEmpty()) {
3658        addSupportingInformation();
3659      }
3660      return getSupportingInformation().get(0);
3661    }
3662
3663    /**
3664     * @return {@link #previousAppointment} (The previous appointment in a series of related appointments.)
3665     */
3666    public Reference getPreviousAppointment() { 
3667      if (this.previousAppointment == null)
3668        if (Configuration.errorOnAutoCreate())
3669          throw new Error("Attempt to auto-create Appointment.previousAppointment");
3670        else if (Configuration.doAutoCreate())
3671          this.previousAppointment = new Reference(); // cc
3672      return this.previousAppointment;
3673    }
3674
3675    public boolean hasPreviousAppointment() { 
3676      return this.previousAppointment != null && !this.previousAppointment.isEmpty();
3677    }
3678
3679    /**
3680     * @param value {@link #previousAppointment} (The previous appointment in a series of related appointments.)
3681     */
3682    public Appointment setPreviousAppointment(Reference value) { 
3683      this.previousAppointment = value;
3684      return this;
3685    }
3686
3687    /**
3688     * @return {@link #originatingAppointment} (The originating appointment in a recurring set of related appointments.)
3689     */
3690    public Reference getOriginatingAppointment() { 
3691      if (this.originatingAppointment == null)
3692        if (Configuration.errorOnAutoCreate())
3693          throw new Error("Attempt to auto-create Appointment.originatingAppointment");
3694        else if (Configuration.doAutoCreate())
3695          this.originatingAppointment = new Reference(); // cc
3696      return this.originatingAppointment;
3697    }
3698
3699    public boolean hasOriginatingAppointment() { 
3700      return this.originatingAppointment != null && !this.originatingAppointment.isEmpty();
3701    }
3702
3703    /**
3704     * @param value {@link #originatingAppointment} (The originating appointment in a recurring set of related appointments.)
3705     */
3706    public Appointment setOriginatingAppointment(Reference value) { 
3707      this.originatingAppointment = value;
3708      return this;
3709    }
3710
3711    /**
3712     * @return {@link #start} (Date/Time that the appointment is to take place.). This is the underlying object with id, value and extensions. The accessor "getStart" gives direct access to the value
3713     */
3714    public InstantType getStartElement() { 
3715      if (this.start == null)
3716        if (Configuration.errorOnAutoCreate())
3717          throw new Error("Attempt to auto-create Appointment.start");
3718        else if (Configuration.doAutoCreate())
3719          this.start = new InstantType(); // bb
3720      return this.start;
3721    }
3722
3723    public boolean hasStartElement() { 
3724      return this.start != null && !this.start.isEmpty();
3725    }
3726
3727    public boolean hasStart() { 
3728      return this.start != null && !this.start.isEmpty();
3729    }
3730
3731    /**
3732     * @param value {@link #start} (Date/Time that the appointment is to take place.). This is the underlying object with id, value and extensions. The accessor "getStart" gives direct access to the value
3733     */
3734    public Appointment setStartElement(InstantType value) { 
3735      this.start = value;
3736      return this;
3737    }
3738
3739    /**
3740     * @return Date/Time that the appointment is to take place.
3741     */
3742    public Date getStart() { 
3743      return this.start == null ? null : this.start.getValue();
3744    }
3745
3746    /**
3747     * @param value Date/Time that the appointment is to take place.
3748     */
3749    public Appointment setStart(Date value) { 
3750      if (value == null)
3751        this.start = null;
3752      else {
3753        if (this.start == null)
3754          this.start = new InstantType();
3755        this.start.setValue(value);
3756      }
3757      return this;
3758    }
3759
3760    /**
3761     * @return {@link #end} (Date/Time that the appointment is to conclude.). This is the underlying object with id, value and extensions. The accessor "getEnd" gives direct access to the value
3762     */
3763    public InstantType getEndElement() { 
3764      if (this.end == null)
3765        if (Configuration.errorOnAutoCreate())
3766          throw new Error("Attempt to auto-create Appointment.end");
3767        else if (Configuration.doAutoCreate())
3768          this.end = new InstantType(); // bb
3769      return this.end;
3770    }
3771
3772    public boolean hasEndElement() { 
3773      return this.end != null && !this.end.isEmpty();
3774    }
3775
3776    public boolean hasEnd() { 
3777      return this.end != null && !this.end.isEmpty();
3778    }
3779
3780    /**
3781     * @param value {@link #end} (Date/Time that the appointment is to conclude.). This is the underlying object with id, value and extensions. The accessor "getEnd" gives direct access to the value
3782     */
3783    public Appointment setEndElement(InstantType value) { 
3784      this.end = value;
3785      return this;
3786    }
3787
3788    /**
3789     * @return Date/Time that the appointment is to conclude.
3790     */
3791    public Date getEnd() { 
3792      return this.end == null ? null : this.end.getValue();
3793    }
3794
3795    /**
3796     * @param value Date/Time that the appointment is to conclude.
3797     */
3798    public Appointment setEnd(Date value) { 
3799      if (value == null)
3800        this.end = null;
3801      else {
3802        if (this.end == null)
3803          this.end = new InstantType();
3804        this.end.setValue(value);
3805      }
3806      return this;
3807    }
3808
3809    /**
3810     * @return {@link #minutesDuration} (Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.). This is the underlying object with id, value and extensions. The accessor "getMinutesDuration" gives direct access to the value
3811     */
3812    public PositiveIntType getMinutesDurationElement() { 
3813      if (this.minutesDuration == null)
3814        if (Configuration.errorOnAutoCreate())
3815          throw new Error("Attempt to auto-create Appointment.minutesDuration");
3816        else if (Configuration.doAutoCreate())
3817          this.minutesDuration = new PositiveIntType(); // bb
3818      return this.minutesDuration;
3819    }
3820
3821    public boolean hasMinutesDurationElement() { 
3822      return this.minutesDuration != null && !this.minutesDuration.isEmpty();
3823    }
3824
3825    public boolean hasMinutesDuration() { 
3826      return this.minutesDuration != null && !this.minutesDuration.isEmpty();
3827    }
3828
3829    /**
3830     * @param value {@link #minutesDuration} (Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.). This is the underlying object with id, value and extensions. The accessor "getMinutesDuration" gives direct access to the value
3831     */
3832    public Appointment setMinutesDurationElement(PositiveIntType value) { 
3833      this.minutesDuration = value;
3834      return this;
3835    }
3836
3837    /**
3838     * @return Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.
3839     */
3840    public int getMinutesDuration() { 
3841      return this.minutesDuration == null || this.minutesDuration.isEmpty() ? 0 : this.minutesDuration.getValue();
3842    }
3843
3844    /**
3845     * @param value Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.
3846     */
3847    public Appointment setMinutesDuration(int value) { 
3848        if (this.minutesDuration == null)
3849          this.minutesDuration = new PositiveIntType();
3850        this.minutesDuration.setValue(value);
3851      return this;
3852    }
3853
3854    /**
3855     * @return {@link #requestedPeriod} (A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within.
3856
3857The duration (usually in minutes) could also be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time. However, in other situations the duration may be calculated by the scheduling system.)
3858     */
3859    public List<Period> getRequestedPeriod() { 
3860      if (this.requestedPeriod == null)
3861        this.requestedPeriod = new ArrayList<Period>();
3862      return this.requestedPeriod;
3863    }
3864
3865    /**
3866     * @return Returns a reference to <code>this</code> for easy method chaining
3867     */
3868    public Appointment setRequestedPeriod(List<Period> theRequestedPeriod) { 
3869      this.requestedPeriod = theRequestedPeriod;
3870      return this;
3871    }
3872
3873    public boolean hasRequestedPeriod() { 
3874      if (this.requestedPeriod == null)
3875        return false;
3876      for (Period item : this.requestedPeriod)
3877        if (!item.isEmpty())
3878          return true;
3879      return false;
3880    }
3881
3882    public Period addRequestedPeriod() { //3
3883      Period t = new Period();
3884      if (this.requestedPeriod == null)
3885        this.requestedPeriod = new ArrayList<Period>();
3886      this.requestedPeriod.add(t);
3887      return t;
3888    }
3889
3890    public Appointment addRequestedPeriod(Period t) { //3
3891      if (t == null)
3892        return this;
3893      if (this.requestedPeriod == null)
3894        this.requestedPeriod = new ArrayList<Period>();
3895      this.requestedPeriod.add(t);
3896      return this;
3897    }
3898
3899    /**
3900     * @return The first repetition of repeating field {@link #requestedPeriod}, creating it if it does not already exist {3}
3901     */
3902    public Period getRequestedPeriodFirstRep() { 
3903      if (getRequestedPeriod().isEmpty()) {
3904        addRequestedPeriod();
3905      }
3906      return getRequestedPeriod().get(0);
3907    }
3908
3909    /**
3910     * @return {@link #slot} (The slots from the participants' schedules that will be filled by the appointment.)
3911     */
3912    public List<Reference> getSlot() { 
3913      if (this.slot == null)
3914        this.slot = new ArrayList<Reference>();
3915      return this.slot;
3916    }
3917
3918    /**
3919     * @return Returns a reference to <code>this</code> for easy method chaining
3920     */
3921    public Appointment setSlot(List<Reference> theSlot) { 
3922      this.slot = theSlot;
3923      return this;
3924    }
3925
3926    public boolean hasSlot() { 
3927      if (this.slot == null)
3928        return false;
3929      for (Reference item : this.slot)
3930        if (!item.isEmpty())
3931          return true;
3932      return false;
3933    }
3934
3935    public Reference addSlot() { //3
3936      Reference t = new Reference();
3937      if (this.slot == null)
3938        this.slot = new ArrayList<Reference>();
3939      this.slot.add(t);
3940      return t;
3941    }
3942
3943    public Appointment addSlot(Reference t) { //3
3944      if (t == null)
3945        return this;
3946      if (this.slot == null)
3947        this.slot = new ArrayList<Reference>();
3948      this.slot.add(t);
3949      return this;
3950    }
3951
3952    /**
3953     * @return The first repetition of repeating field {@link #slot}, creating it if it does not already exist {3}
3954     */
3955    public Reference getSlotFirstRep() { 
3956      if (getSlot().isEmpty()) {
3957        addSlot();
3958      }
3959      return getSlot().get(0);
3960    }
3961
3962    /**
3963     * @return {@link #account} (The set of accounts that is expected to be used for billing the activities that result from this Appointment.)
3964     */
3965    public List<Reference> getAccount() { 
3966      if (this.account == null)
3967        this.account = new ArrayList<Reference>();
3968      return this.account;
3969    }
3970
3971    /**
3972     * @return Returns a reference to <code>this</code> for easy method chaining
3973     */
3974    public Appointment setAccount(List<Reference> theAccount) { 
3975      this.account = theAccount;
3976      return this;
3977    }
3978
3979    public boolean hasAccount() { 
3980      if (this.account == null)
3981        return false;
3982      for (Reference item : this.account)
3983        if (!item.isEmpty())
3984          return true;
3985      return false;
3986    }
3987
3988    public Reference addAccount() { //3
3989      Reference t = new Reference();
3990      if (this.account == null)
3991        this.account = new ArrayList<Reference>();
3992      this.account.add(t);
3993      return t;
3994    }
3995
3996    public Appointment addAccount(Reference t) { //3
3997      if (t == null)
3998        return this;
3999      if (this.account == null)
4000        this.account = new ArrayList<Reference>();
4001      this.account.add(t);
4002      return this;
4003    }
4004
4005    /**
4006     * @return The first repetition of repeating field {@link #account}, creating it if it does not already exist {3}
4007     */
4008    public Reference getAccountFirstRep() { 
4009      if (getAccount().isEmpty()) {
4010        addAccount();
4011      }
4012      return getAccount().get(0);
4013    }
4014
4015    /**
4016     * @return {@link #created} (The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
4017     */
4018    public DateTimeType getCreatedElement() { 
4019      if (this.created == null)
4020        if (Configuration.errorOnAutoCreate())
4021          throw new Error("Attempt to auto-create Appointment.created");
4022        else if (Configuration.doAutoCreate())
4023          this.created = new DateTimeType(); // bb
4024      return this.created;
4025    }
4026
4027    public boolean hasCreatedElement() { 
4028      return this.created != null && !this.created.isEmpty();
4029    }
4030
4031    public boolean hasCreated() { 
4032      return this.created != null && !this.created.isEmpty();
4033    }
4034
4035    /**
4036     * @param value {@link #created} (The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
4037     */
4038    public Appointment setCreatedElement(DateTimeType value) { 
4039      this.created = value;
4040      return this;
4041    }
4042
4043    /**
4044     * @return The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.
4045     */
4046    public Date getCreated() { 
4047      return this.created == null ? null : this.created.getValue();
4048    }
4049
4050    /**
4051     * @param value The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.
4052     */
4053    public Appointment setCreated(Date value) { 
4054      if (value == null)
4055        this.created = null;
4056      else {
4057        if (this.created == null)
4058          this.created = new DateTimeType();
4059        this.created.setValue(value);
4060      }
4061      return this;
4062    }
4063
4064    /**
4065     * @return {@link #cancellationDate} (The date/time describing when the appointment was cancelled.). This is the underlying object with id, value and extensions. The accessor "getCancellationDate" gives direct access to the value
4066     */
4067    public DateTimeType getCancellationDateElement() { 
4068      if (this.cancellationDate == null)
4069        if (Configuration.errorOnAutoCreate())
4070          throw new Error("Attempt to auto-create Appointment.cancellationDate");
4071        else if (Configuration.doAutoCreate())
4072          this.cancellationDate = new DateTimeType(); // bb
4073      return this.cancellationDate;
4074    }
4075
4076    public boolean hasCancellationDateElement() { 
4077      return this.cancellationDate != null && !this.cancellationDate.isEmpty();
4078    }
4079
4080    public boolean hasCancellationDate() { 
4081      return this.cancellationDate != null && !this.cancellationDate.isEmpty();
4082    }
4083
4084    /**
4085     * @param value {@link #cancellationDate} (The date/time describing when the appointment was cancelled.). This is the underlying object with id, value and extensions. The accessor "getCancellationDate" gives direct access to the value
4086     */
4087    public Appointment setCancellationDateElement(DateTimeType value) { 
4088      this.cancellationDate = value;
4089      return this;
4090    }
4091
4092    /**
4093     * @return The date/time describing when the appointment was cancelled.
4094     */
4095    public Date getCancellationDate() { 
4096      return this.cancellationDate == null ? null : this.cancellationDate.getValue();
4097    }
4098
4099    /**
4100     * @param value The date/time describing when the appointment was cancelled.
4101     */
4102    public Appointment setCancellationDate(Date value) { 
4103      if (value == null)
4104        this.cancellationDate = null;
4105      else {
4106        if (this.cancellationDate == null)
4107          this.cancellationDate = new DateTimeType();
4108        this.cancellationDate.setValue(value);
4109      }
4110      return this;
4111    }
4112
4113    /**
4114     * @return {@link #note} (Additional notes/comments about the appointment.)
4115     */
4116    public List<Annotation> getNote() { 
4117      if (this.note == null)
4118        this.note = new ArrayList<Annotation>();
4119      return this.note;
4120    }
4121
4122    /**
4123     * @return Returns a reference to <code>this</code> for easy method chaining
4124     */
4125    public Appointment setNote(List<Annotation> theNote) { 
4126      this.note = theNote;
4127      return this;
4128    }
4129
4130    public boolean hasNote() { 
4131      if (this.note == null)
4132        return false;
4133      for (Annotation item : this.note)
4134        if (!item.isEmpty())
4135          return true;
4136      return false;
4137    }
4138
4139    public Annotation addNote() { //3
4140      Annotation t = new Annotation();
4141      if (this.note == null)
4142        this.note = new ArrayList<Annotation>();
4143      this.note.add(t);
4144      return t;
4145    }
4146
4147    public Appointment addNote(Annotation t) { //3
4148      if (t == null)
4149        return this;
4150      if (this.note == null)
4151        this.note = new ArrayList<Annotation>();
4152      this.note.add(t);
4153      return this;
4154    }
4155
4156    /**
4157     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
4158     */
4159    public Annotation getNoteFirstRep() { 
4160      if (getNote().isEmpty()) {
4161        addNote();
4162      }
4163      return getNote().get(0);
4164    }
4165
4166    /**
4167     * @return {@link #patientInstruction} (While Appointment.note contains information for internal use, Appointment.patientInstructions is used to capture patient facing information about the Appointment (e.g. please bring your referral or fast from 8pm night before).)
4168     */
4169    public List<CodeableReference> getPatientInstruction() { 
4170      if (this.patientInstruction == null)
4171        this.patientInstruction = new ArrayList<CodeableReference>();
4172      return this.patientInstruction;
4173    }
4174
4175    /**
4176     * @return Returns a reference to <code>this</code> for easy method chaining
4177     */
4178    public Appointment setPatientInstruction(List<CodeableReference> thePatientInstruction) { 
4179      this.patientInstruction = thePatientInstruction;
4180      return this;
4181    }
4182
4183    public boolean hasPatientInstruction() { 
4184      if (this.patientInstruction == null)
4185        return false;
4186      for (CodeableReference item : this.patientInstruction)
4187        if (!item.isEmpty())
4188          return true;
4189      return false;
4190    }
4191
4192    public CodeableReference addPatientInstruction() { //3
4193      CodeableReference t = new CodeableReference();
4194      if (this.patientInstruction == null)
4195        this.patientInstruction = new ArrayList<CodeableReference>();
4196      this.patientInstruction.add(t);
4197      return t;
4198    }
4199
4200    public Appointment addPatientInstruction(CodeableReference t) { //3
4201      if (t == null)
4202        return this;
4203      if (this.patientInstruction == null)
4204        this.patientInstruction = new ArrayList<CodeableReference>();
4205      this.patientInstruction.add(t);
4206      return this;
4207    }
4208
4209    /**
4210     * @return The first repetition of repeating field {@link #patientInstruction}, creating it if it does not already exist {3}
4211     */
4212    public CodeableReference getPatientInstructionFirstRep() { 
4213      if (getPatientInstruction().isEmpty()) {
4214        addPatientInstruction();
4215      }
4216      return getPatientInstruction().get(0);
4217    }
4218
4219    /**
4220     * @return {@link #basedOn} (The request this appointment is allocated to assess (e.g. incoming referral or procedure request).)
4221     */
4222    public List<Reference> getBasedOn() { 
4223      if (this.basedOn == null)
4224        this.basedOn = new ArrayList<Reference>();
4225      return this.basedOn;
4226    }
4227
4228    /**
4229     * @return Returns a reference to <code>this</code> for easy method chaining
4230     */
4231    public Appointment setBasedOn(List<Reference> theBasedOn) { 
4232      this.basedOn = theBasedOn;
4233      return this;
4234    }
4235
4236    public boolean hasBasedOn() { 
4237      if (this.basedOn == null)
4238        return false;
4239      for (Reference item : this.basedOn)
4240        if (!item.isEmpty())
4241          return true;
4242      return false;
4243    }
4244
4245    public Reference addBasedOn() { //3
4246      Reference t = new Reference();
4247      if (this.basedOn == null)
4248        this.basedOn = new ArrayList<Reference>();
4249      this.basedOn.add(t);
4250      return t;
4251    }
4252
4253    public Appointment addBasedOn(Reference t) { //3
4254      if (t == null)
4255        return this;
4256      if (this.basedOn == null)
4257        this.basedOn = new ArrayList<Reference>();
4258      this.basedOn.add(t);
4259      return this;
4260    }
4261
4262    /**
4263     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist {3}
4264     */
4265    public Reference getBasedOnFirstRep() { 
4266      if (getBasedOn().isEmpty()) {
4267        addBasedOn();
4268      }
4269      return getBasedOn().get(0);
4270    }
4271
4272    /**
4273     * @return {@link #subject} (The patient or group associated with the appointment, if they are to be present (usually) then they should also be included in the participant backbone element.)
4274     */
4275    public Reference getSubject() { 
4276      if (this.subject == null)
4277        if (Configuration.errorOnAutoCreate())
4278          throw new Error("Attempt to auto-create Appointment.subject");
4279        else if (Configuration.doAutoCreate())
4280          this.subject = new Reference(); // cc
4281      return this.subject;
4282    }
4283
4284    public boolean hasSubject() { 
4285      return this.subject != null && !this.subject.isEmpty();
4286    }
4287
4288    /**
4289     * @param value {@link #subject} (The patient or group associated with the appointment, if they are to be present (usually) then they should also be included in the participant backbone element.)
4290     */
4291    public Appointment setSubject(Reference value) { 
4292      this.subject = value;
4293      return this;
4294    }
4295
4296    /**
4297     * @return {@link #participant} (List of participants involved in the appointment.)
4298     */
4299    public List<AppointmentParticipantComponent> getParticipant() { 
4300      if (this.participant == null)
4301        this.participant = new ArrayList<AppointmentParticipantComponent>();
4302      return this.participant;
4303    }
4304
4305    /**
4306     * @return Returns a reference to <code>this</code> for easy method chaining
4307     */
4308    public Appointment setParticipant(List<AppointmentParticipantComponent> theParticipant) { 
4309      this.participant = theParticipant;
4310      return this;
4311    }
4312
4313    public boolean hasParticipant() { 
4314      if (this.participant == null)
4315        return false;
4316      for (AppointmentParticipantComponent item : this.participant)
4317        if (!item.isEmpty())
4318          return true;
4319      return false;
4320    }
4321
4322    public AppointmentParticipantComponent addParticipant() { //3
4323      AppointmentParticipantComponent t = new AppointmentParticipantComponent();
4324      if (this.participant == null)
4325        this.participant = new ArrayList<AppointmentParticipantComponent>();
4326      this.participant.add(t);
4327      return t;
4328    }
4329
4330    public Appointment addParticipant(AppointmentParticipantComponent t) { //3
4331      if (t == null)
4332        return this;
4333      if (this.participant == null)
4334        this.participant = new ArrayList<AppointmentParticipantComponent>();
4335      this.participant.add(t);
4336      return this;
4337    }
4338
4339    /**
4340     * @return The first repetition of repeating field {@link #participant}, creating it if it does not already exist {3}
4341     */
4342    public AppointmentParticipantComponent getParticipantFirstRep() { 
4343      if (getParticipant().isEmpty()) {
4344        addParticipant();
4345      }
4346      return getParticipant().get(0);
4347    }
4348
4349    /**
4350     * @return {@link #recurrenceId} (The sequence number that identifies a specific appointment in a recurring pattern.). This is the underlying object with id, value and extensions. The accessor "getRecurrenceId" gives direct access to the value
4351     */
4352    public PositiveIntType getRecurrenceIdElement() { 
4353      if (this.recurrenceId == null)
4354        if (Configuration.errorOnAutoCreate())
4355          throw new Error("Attempt to auto-create Appointment.recurrenceId");
4356        else if (Configuration.doAutoCreate())
4357          this.recurrenceId = new PositiveIntType(); // bb
4358      return this.recurrenceId;
4359    }
4360
4361    public boolean hasRecurrenceIdElement() { 
4362      return this.recurrenceId != null && !this.recurrenceId.isEmpty();
4363    }
4364
4365    public boolean hasRecurrenceId() { 
4366      return this.recurrenceId != null && !this.recurrenceId.isEmpty();
4367    }
4368
4369    /**
4370     * @param value {@link #recurrenceId} (The sequence number that identifies a specific appointment in a recurring pattern.). This is the underlying object with id, value and extensions. The accessor "getRecurrenceId" gives direct access to the value
4371     */
4372    public Appointment setRecurrenceIdElement(PositiveIntType value) { 
4373      this.recurrenceId = value;
4374      return this;
4375    }
4376
4377    /**
4378     * @return The sequence number that identifies a specific appointment in a recurring pattern.
4379     */
4380    public int getRecurrenceId() { 
4381      return this.recurrenceId == null || this.recurrenceId.isEmpty() ? 0 : this.recurrenceId.getValue();
4382    }
4383
4384    /**
4385     * @param value The sequence number that identifies a specific appointment in a recurring pattern.
4386     */
4387    public Appointment setRecurrenceId(int value) { 
4388        if (this.recurrenceId == null)
4389          this.recurrenceId = new PositiveIntType();
4390        this.recurrenceId.setValue(value);
4391      return this;
4392    }
4393
4394    /**
4395     * @return {@link #occurrenceChanged} (This appointment varies from the recurring pattern.). This is the underlying object with id, value and extensions. The accessor "getOccurrenceChanged" gives direct access to the value
4396     */
4397    public BooleanType getOccurrenceChangedElement() { 
4398      if (this.occurrenceChanged == null)
4399        if (Configuration.errorOnAutoCreate())
4400          throw new Error("Attempt to auto-create Appointment.occurrenceChanged");
4401        else if (Configuration.doAutoCreate())
4402          this.occurrenceChanged = new BooleanType(); // bb
4403      return this.occurrenceChanged;
4404    }
4405
4406    public boolean hasOccurrenceChangedElement() { 
4407      return this.occurrenceChanged != null && !this.occurrenceChanged.isEmpty();
4408    }
4409
4410    public boolean hasOccurrenceChanged() { 
4411      return this.occurrenceChanged != null && !this.occurrenceChanged.isEmpty();
4412    }
4413
4414    /**
4415     * @param value {@link #occurrenceChanged} (This appointment varies from the recurring pattern.). This is the underlying object with id, value and extensions. The accessor "getOccurrenceChanged" gives direct access to the value
4416     */
4417    public Appointment setOccurrenceChangedElement(BooleanType value) { 
4418      this.occurrenceChanged = value;
4419      return this;
4420    }
4421
4422    /**
4423     * @return This appointment varies from the recurring pattern.
4424     */
4425    public boolean getOccurrenceChanged() { 
4426      return this.occurrenceChanged == null || this.occurrenceChanged.isEmpty() ? false : this.occurrenceChanged.getValue();
4427    }
4428
4429    /**
4430     * @param value This appointment varies from the recurring pattern.
4431     */
4432    public Appointment setOccurrenceChanged(boolean value) { 
4433        if (this.occurrenceChanged == null)
4434          this.occurrenceChanged = new BooleanType();
4435        this.occurrenceChanged.setValue(value);
4436      return this;
4437    }
4438
4439    /**
4440     * @return {@link #recurrenceTemplate} (The details of the recurrence pattern or template that is used to generate recurring appointments.)
4441     */
4442    public List<AppointmentRecurrenceTemplateComponent> getRecurrenceTemplate() { 
4443      if (this.recurrenceTemplate == null)
4444        this.recurrenceTemplate = new ArrayList<AppointmentRecurrenceTemplateComponent>();
4445      return this.recurrenceTemplate;
4446    }
4447
4448    /**
4449     * @return Returns a reference to <code>this</code> for easy method chaining
4450     */
4451    public Appointment setRecurrenceTemplate(List<AppointmentRecurrenceTemplateComponent> theRecurrenceTemplate) { 
4452      this.recurrenceTemplate = theRecurrenceTemplate;
4453      return this;
4454    }
4455
4456    public boolean hasRecurrenceTemplate() { 
4457      if (this.recurrenceTemplate == null)
4458        return false;
4459      for (AppointmentRecurrenceTemplateComponent item : this.recurrenceTemplate)
4460        if (!item.isEmpty())
4461          return true;
4462      return false;
4463    }
4464
4465    public AppointmentRecurrenceTemplateComponent addRecurrenceTemplate() { //3
4466      AppointmentRecurrenceTemplateComponent t = new AppointmentRecurrenceTemplateComponent();
4467      if (this.recurrenceTemplate == null)
4468        this.recurrenceTemplate = new ArrayList<AppointmentRecurrenceTemplateComponent>();
4469      this.recurrenceTemplate.add(t);
4470      return t;
4471    }
4472
4473    public Appointment addRecurrenceTemplate(AppointmentRecurrenceTemplateComponent t) { //3
4474      if (t == null)
4475        return this;
4476      if (this.recurrenceTemplate == null)
4477        this.recurrenceTemplate = new ArrayList<AppointmentRecurrenceTemplateComponent>();
4478      this.recurrenceTemplate.add(t);
4479      return this;
4480    }
4481
4482    /**
4483     * @return The first repetition of repeating field {@link #recurrenceTemplate}, creating it if it does not already exist {3}
4484     */
4485    public AppointmentRecurrenceTemplateComponent getRecurrenceTemplateFirstRep() { 
4486      if (getRecurrenceTemplate().isEmpty()) {
4487        addRecurrenceTemplate();
4488      }
4489      return getRecurrenceTemplate().get(0);
4490    }
4491
4492      protected void listChildren(List<Property> children) {
4493        super.listChildren(children);
4494        children.add(new Property("identifier", "Identifier", "This records identifiers associated with this appointment concern 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 (e.g. in CDA documents, or in written / printed documentation).", 0, java.lang.Integer.MAX_VALUE, identifier));
4495        children.add(new Property("status", "code", "The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.", 0, 1, status));
4496        children.add(new Property("cancellationReason", "CodeableConcept", "The coded reason for the appointment being cancelled. This is often used in reporting/billing/futher processing to determine if further actions are required, or specific fees apply.", 0, 1, cancellationReason));
4497        children.add(new Property("class", "CodeableConcept", "Concepts representing classification of patient encounter such as ambulatory (outpatient), inpatient, emergency, home health or others due to local variations.", 0, java.lang.Integer.MAX_VALUE, class_));
4498        children.add(new Property("serviceCategory", "CodeableConcept", "A broad categorization of the service that is to be performed during this appointment.", 0, java.lang.Integer.MAX_VALUE, serviceCategory));
4499        children.add(new Property("serviceType", "CodeableReference(HealthcareService)", "The specific service that is to be performed during this appointment.", 0, java.lang.Integer.MAX_VALUE, serviceType));
4500        children.add(new Property("specialty", "CodeableConcept", "The specialty of a practitioner that would be required to perform the service requested in this appointment.", 0, java.lang.Integer.MAX_VALUE, specialty));
4501        children.add(new Property("appointmentType", "CodeableConcept", "The style of appointment or patient that has been booked in the slot (not service type).", 0, 1, appointmentType));
4502        children.add(new Property("reason", "CodeableReference(Condition|Procedure|Observation|ImmunizationRecommendation)", "The reason that this appointment is being scheduled. This is more clinical than administrative. This can be coded, or as specified using information from another resource. When the patient arrives and the encounter begins it may be used as the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure.", 0, java.lang.Integer.MAX_VALUE, reason));
4503        children.add(new Property("priority", "CodeableConcept", "The priority of the appointment. Can be used to make informed decisions if needing to re-prioritize appointments. (The iCal Standard specifies 0 as undefined, 1 as highest, 9 as lowest priority).", 0, 1, priority));
4504        children.add(new Property("description", "string", "The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the note field.", 0, 1, description));
4505        children.add(new Property("replaces", "Reference(Appointment)", "Appointment replaced by this Appointment in cases where there is a cancellation, the details of the cancellation can be found in the cancellationReason property (on the referenced resource).", 0, java.lang.Integer.MAX_VALUE, replaces));
4506        children.add(new Property("virtualService", "VirtualServiceDetail", "Connection details of a virtual service (e.g. conference call).", 0, java.lang.Integer.MAX_VALUE, virtualService));
4507        children.add(new Property("supportingInformation", "Reference(Any)", "Additional information to support the appointment provided when making the appointment.", 0, java.lang.Integer.MAX_VALUE, supportingInformation));
4508        children.add(new Property("previousAppointment", "Reference(Appointment)", "The previous appointment in a series of related appointments.", 0, 1, previousAppointment));
4509        children.add(new Property("originatingAppointment", "Reference(Appointment)", "The originating appointment in a recurring set of related appointments.", 0, 1, originatingAppointment));
4510        children.add(new Property("start", "instant", "Date/Time that the appointment is to take place.", 0, 1, start));
4511        children.add(new Property("end", "instant", "Date/Time that the appointment is to conclude.", 0, 1, end));
4512        children.add(new Property("minutesDuration", "positiveInt", "Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.", 0, 1, minutesDuration));
4513        children.add(new Property("requestedPeriod", "Period", "A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within.\n\nThe duration (usually in minutes) could also be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time. However, in other situations the duration may be calculated by the scheduling system.", 0, java.lang.Integer.MAX_VALUE, requestedPeriod));
4514        children.add(new Property("slot", "Reference(Slot)", "The slots from the participants' schedules that will be filled by the appointment.", 0, java.lang.Integer.MAX_VALUE, slot));
4515        children.add(new Property("account", "Reference(Account)", "The set of accounts that is expected to be used for billing the activities that result from this Appointment.", 0, java.lang.Integer.MAX_VALUE, account));
4516        children.add(new Property("created", "dateTime", "The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.", 0, 1, created));
4517        children.add(new Property("cancellationDate", "dateTime", "The date/time describing when the appointment was cancelled.", 0, 1, cancellationDate));
4518        children.add(new Property("note", "Annotation", "Additional notes/comments about the appointment.", 0, java.lang.Integer.MAX_VALUE, note));
4519        children.add(new Property("patientInstruction", "CodeableReference(DocumentReference|Binary|Communication)", "While Appointment.note contains information for internal use, Appointment.patientInstructions is used to capture patient facing information about the Appointment (e.g. please bring your referral or fast from 8pm night before).", 0, java.lang.Integer.MAX_VALUE, patientInstruction));
4520        children.add(new Property("basedOn", "Reference(CarePlan|DeviceRequest|MedicationRequest|ServiceRequest)", "The request this appointment is allocated to assess (e.g. incoming referral or procedure request).", 0, java.lang.Integer.MAX_VALUE, basedOn));
4521        children.add(new Property("subject", "Reference(Patient|Group)", "The patient or group associated with the appointment, if they are to be present (usually) then they should also be included in the participant backbone element.", 0, 1, subject));
4522        children.add(new Property("participant", "", "List of participants involved in the appointment.", 0, java.lang.Integer.MAX_VALUE, participant));
4523        children.add(new Property("recurrenceId", "positiveInt", "The sequence number that identifies a specific appointment in a recurring pattern.", 0, 1, recurrenceId));
4524        children.add(new Property("occurrenceChanged", "boolean", "This appointment varies from the recurring pattern.", 0, 1, occurrenceChanged));
4525        children.add(new Property("recurrenceTemplate", "", "The details of the recurrence pattern or template that is used to generate recurring appointments.", 0, java.lang.Integer.MAX_VALUE, recurrenceTemplate));
4526      }
4527
4528      @Override
4529      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4530        switch (_hash) {
4531        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "This records identifiers associated with this appointment concern 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 (e.g. in CDA documents, or in written / printed documentation).", 0, java.lang.Integer.MAX_VALUE, identifier);
4532        case -892481550: /*status*/  return new Property("status", "code", "The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.", 0, 1, status);
4533        case 2135095591: /*cancellationReason*/  return new Property("cancellationReason", "CodeableConcept", "The coded reason for the appointment being cancelled. This is often used in reporting/billing/futher processing to determine if further actions are required, or specific fees apply.", 0, 1, cancellationReason);
4534        case 94742904: /*class*/  return new Property("class", "CodeableConcept", "Concepts representing classification of patient encounter such as ambulatory (outpatient), inpatient, emergency, home health or others due to local variations.", 0, java.lang.Integer.MAX_VALUE, class_);
4535        case 1281188563: /*serviceCategory*/  return new Property("serviceCategory", "CodeableConcept", "A broad categorization of the service that is to be performed during this appointment.", 0, java.lang.Integer.MAX_VALUE, serviceCategory);
4536        case -1928370289: /*serviceType*/  return new Property("serviceType", "CodeableReference(HealthcareService)", "The specific service that is to be performed during this appointment.", 0, java.lang.Integer.MAX_VALUE, serviceType);
4537        case -1694759682: /*specialty*/  return new Property("specialty", "CodeableConcept", "The specialty of a practitioner that would be required to perform the service requested in this appointment.", 0, java.lang.Integer.MAX_VALUE, specialty);
4538        case -1596426375: /*appointmentType*/  return new Property("appointmentType", "CodeableConcept", "The style of appointment or patient that has been booked in the slot (not service type).", 0, 1, appointmentType);
4539        case -934964668: /*reason*/  return new Property("reason", "CodeableReference(Condition|Procedure|Observation|ImmunizationRecommendation)", "The reason that this appointment is being scheduled. This is more clinical than administrative. This can be coded, or as specified using information from another resource. When the patient arrives and the encounter begins it may be used as the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure.", 0, java.lang.Integer.MAX_VALUE, reason);
4540        case -1165461084: /*priority*/  return new Property("priority", "CodeableConcept", "The priority of the appointment. Can be used to make informed decisions if needing to re-prioritize appointments. (The iCal Standard specifies 0 as undefined, 1 as highest, 9 as lowest priority).", 0, 1, priority);
4541        case -1724546052: /*description*/  return new Property("description", "string", "The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the note field.", 0, 1, description);
4542        case -430332865: /*replaces*/  return new Property("replaces", "Reference(Appointment)", "Appointment replaced by this Appointment in cases where there is a cancellation, the details of the cancellation can be found in the cancellationReason property (on the referenced resource).", 0, java.lang.Integer.MAX_VALUE, replaces);
4543        case 1420774698: /*virtualService*/  return new Property("virtualService", "VirtualServiceDetail", "Connection details of a virtual service (e.g. conference call).", 0, java.lang.Integer.MAX_VALUE, virtualService);
4544        case -1248768647: /*supportingInformation*/  return new Property("supportingInformation", "Reference(Any)", "Additional information to support the appointment provided when making the appointment.", 0, java.lang.Integer.MAX_VALUE, supportingInformation);
4545        case -1676044248: /*previousAppointment*/  return new Property("previousAppointment", "Reference(Appointment)", "The previous appointment in a series of related appointments.", 0, 1, previousAppointment);
4546        case 1841882230: /*originatingAppointment*/  return new Property("originatingAppointment", "Reference(Appointment)", "The originating appointment in a recurring set of related appointments.", 0, 1, originatingAppointment);
4547        case 109757538: /*start*/  return new Property("start", "instant", "Date/Time that the appointment is to take place.", 0, 1, start);
4548        case 100571: /*end*/  return new Property("end", "instant", "Date/Time that the appointment is to conclude.", 0, 1, end);
4549        case -413630573: /*minutesDuration*/  return new Property("minutesDuration", "positiveInt", "Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.", 0, 1, minutesDuration);
4550        case -897241393: /*requestedPeriod*/  return new Property("requestedPeriod", "Period", "A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within.\n\nThe duration (usually in minutes) could also be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time. However, in other situations the duration may be calculated by the scheduling system.", 0, java.lang.Integer.MAX_VALUE, requestedPeriod);
4551        case 3533310: /*slot*/  return new Property("slot", "Reference(Slot)", "The slots from the participants' schedules that will be filled by the appointment.", 0, java.lang.Integer.MAX_VALUE, slot);
4552        case -1177318867: /*account*/  return new Property("account", "Reference(Account)", "The set of accounts that is expected to be used for billing the activities that result from this Appointment.", 0, java.lang.Integer.MAX_VALUE, account);
4553        case 1028554472: /*created*/  return new Property("created", "dateTime", "The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.", 0, 1, created);
4554        case 806269777: /*cancellationDate*/  return new Property("cancellationDate", "dateTime", "The date/time describing when the appointment was cancelled.", 0, 1, cancellationDate);
4555        case 3387378: /*note*/  return new Property("note", "Annotation", "Additional notes/comments about the appointment.", 0, java.lang.Integer.MAX_VALUE, note);
4556        case 737543241: /*patientInstruction*/  return new Property("patientInstruction", "CodeableReference(DocumentReference|Binary|Communication)", "While Appointment.note contains information for internal use, Appointment.patientInstructions is used to capture patient facing information about the Appointment (e.g. please bring your referral or fast from 8pm night before).", 0, java.lang.Integer.MAX_VALUE, patientInstruction);
4557        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(CarePlan|DeviceRequest|MedicationRequest|ServiceRequest)", "The request this appointment is allocated to assess (e.g. incoming referral or procedure request).", 0, java.lang.Integer.MAX_VALUE, basedOn);
4558        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group)", "The patient or group associated with the appointment, if they are to be present (usually) then they should also be included in the participant backbone element.", 0, 1, subject);
4559        case 767422259: /*participant*/  return new Property("participant", "", "List of participants involved in the appointment.", 0, java.lang.Integer.MAX_VALUE, participant);
4560        case -362407829: /*recurrenceId*/  return new Property("recurrenceId", "positiveInt", "The sequence number that identifies a specific appointment in a recurring pattern.", 0, 1, recurrenceId);
4561        case 1779864483: /*occurrenceChanged*/  return new Property("occurrenceChanged", "boolean", "This appointment varies from the recurring pattern.", 0, 1, occurrenceChanged);
4562        case 597629898: /*recurrenceTemplate*/  return new Property("recurrenceTemplate", "", "The details of the recurrence pattern or template that is used to generate recurring appointments.", 0, java.lang.Integer.MAX_VALUE, recurrenceTemplate);
4563        default: return super.getNamedProperty(_hash, _name, _checkValid);
4564        }
4565
4566      }
4567
4568      @Override
4569      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4570        switch (hash) {
4571        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
4572        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<AppointmentStatus>
4573        case 2135095591: /*cancellationReason*/ return this.cancellationReason == null ? new Base[0] : new Base[] {this.cancellationReason}; // CodeableConcept
4574        case 94742904: /*class*/ return this.class_ == null ? new Base[0] : this.class_.toArray(new Base[this.class_.size()]); // CodeableConcept
4575        case 1281188563: /*serviceCategory*/ return this.serviceCategory == null ? new Base[0] : this.serviceCategory.toArray(new Base[this.serviceCategory.size()]); // CodeableConcept
4576        case -1928370289: /*serviceType*/ return this.serviceType == null ? new Base[0] : this.serviceType.toArray(new Base[this.serviceType.size()]); // CodeableReference
4577        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
4578        case -1596426375: /*appointmentType*/ return this.appointmentType == null ? new Base[0] : new Base[] {this.appointmentType}; // CodeableConcept
4579        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : this.reason.toArray(new Base[this.reason.size()]); // CodeableReference
4580        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // CodeableConcept
4581        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
4582        case -430332865: /*replaces*/ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // Reference
4583        case 1420774698: /*virtualService*/ return this.virtualService == null ? new Base[0] : this.virtualService.toArray(new Base[this.virtualService.size()]); // VirtualServiceDetail
4584        case -1248768647: /*supportingInformation*/ return this.supportingInformation == null ? new Base[0] : this.supportingInformation.toArray(new Base[this.supportingInformation.size()]); // Reference
4585        case -1676044248: /*previousAppointment*/ return this.previousAppointment == null ? new Base[0] : new Base[] {this.previousAppointment}; // Reference
4586        case 1841882230: /*originatingAppointment*/ return this.originatingAppointment == null ? new Base[0] : new Base[] {this.originatingAppointment}; // Reference
4587        case 109757538: /*start*/ return this.start == null ? new Base[0] : new Base[] {this.start}; // InstantType
4588        case 100571: /*end*/ return this.end == null ? new Base[0] : new Base[] {this.end}; // InstantType
4589        case -413630573: /*minutesDuration*/ return this.minutesDuration == null ? new Base[0] : new Base[] {this.minutesDuration}; // PositiveIntType
4590        case -897241393: /*requestedPeriod*/ return this.requestedPeriod == null ? new Base[0] : this.requestedPeriod.toArray(new Base[this.requestedPeriod.size()]); // Period
4591        case 3533310: /*slot*/ return this.slot == null ? new Base[0] : this.slot.toArray(new Base[this.slot.size()]); // Reference
4592        case -1177318867: /*account*/ return this.account == null ? new Base[0] : this.account.toArray(new Base[this.account.size()]); // Reference
4593        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateTimeType
4594        case 806269777: /*cancellationDate*/ return this.cancellationDate == null ? new Base[0] : new Base[] {this.cancellationDate}; // DateTimeType
4595        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
4596        case 737543241: /*patientInstruction*/ return this.patientInstruction == null ? new Base[0] : this.patientInstruction.toArray(new Base[this.patientInstruction.size()]); // CodeableReference
4597        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
4598        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
4599        case 767422259: /*participant*/ return this.participant == null ? new Base[0] : this.participant.toArray(new Base[this.participant.size()]); // AppointmentParticipantComponent
4600        case -362407829: /*recurrenceId*/ return this.recurrenceId == null ? new Base[0] : new Base[] {this.recurrenceId}; // PositiveIntType
4601        case 1779864483: /*occurrenceChanged*/ return this.occurrenceChanged == null ? new Base[0] : new Base[] {this.occurrenceChanged}; // BooleanType
4602        case 597629898: /*recurrenceTemplate*/ return this.recurrenceTemplate == null ? new Base[0] : this.recurrenceTemplate.toArray(new Base[this.recurrenceTemplate.size()]); // AppointmentRecurrenceTemplateComponent
4603        default: return super.getProperty(hash, name, checkValid);
4604        }
4605
4606      }
4607
4608      @Override
4609      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4610        switch (hash) {
4611        case -1618432855: // identifier
4612          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
4613          return value;
4614        case -892481550: // status
4615          value = new AppointmentStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4616          this.status = (Enumeration) value; // Enumeration<AppointmentStatus>
4617          return value;
4618        case 2135095591: // cancellationReason
4619          this.cancellationReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4620          return value;
4621        case 94742904: // class
4622          this.getClass_().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
4623          return value;
4624        case 1281188563: // serviceCategory
4625          this.getServiceCategory().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
4626          return value;
4627        case -1928370289: // serviceType
4628          this.getServiceType().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
4629          return value;
4630        case -1694759682: // specialty
4631          this.getSpecialty().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
4632          return value;
4633        case -1596426375: // appointmentType
4634          this.appointmentType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4635          return value;
4636        case -934964668: // reason
4637          this.getReason().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
4638          return value;
4639        case -1165461084: // priority
4640          this.priority = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4641          return value;
4642        case -1724546052: // description
4643          this.description = TypeConvertor.castToString(value); // StringType
4644          return value;
4645        case -430332865: // replaces
4646          this.getReplaces().add(TypeConvertor.castToReference(value)); // Reference
4647          return value;
4648        case 1420774698: // virtualService
4649          this.getVirtualService().add(TypeConvertor.castToVirtualServiceDetail(value)); // VirtualServiceDetail
4650          return value;
4651        case -1248768647: // supportingInformation
4652          this.getSupportingInformation().add(TypeConvertor.castToReference(value)); // Reference
4653          return value;
4654        case -1676044248: // previousAppointment
4655          this.previousAppointment = TypeConvertor.castToReference(value); // Reference
4656          return value;
4657        case 1841882230: // originatingAppointment
4658          this.originatingAppointment = TypeConvertor.castToReference(value); // Reference
4659          return value;
4660        case 109757538: // start
4661          this.start = TypeConvertor.castToInstant(value); // InstantType
4662          return value;
4663        case 100571: // end
4664          this.end = TypeConvertor.castToInstant(value); // InstantType
4665          return value;
4666        case -413630573: // minutesDuration
4667          this.minutesDuration = TypeConvertor.castToPositiveInt(value); // PositiveIntType
4668          return value;
4669        case -897241393: // requestedPeriod
4670          this.getRequestedPeriod().add(TypeConvertor.castToPeriod(value)); // Period
4671          return value;
4672        case 3533310: // slot
4673          this.getSlot().add(TypeConvertor.castToReference(value)); // Reference
4674          return value;
4675        case -1177318867: // account
4676          this.getAccount().add(TypeConvertor.castToReference(value)); // Reference
4677          return value;
4678        case 1028554472: // created
4679          this.created = TypeConvertor.castToDateTime(value); // DateTimeType
4680          return value;
4681        case 806269777: // cancellationDate
4682          this.cancellationDate = TypeConvertor.castToDateTime(value); // DateTimeType
4683          return value;
4684        case 3387378: // note
4685          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
4686          return value;
4687        case 737543241: // patientInstruction
4688          this.getPatientInstruction().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
4689          return value;
4690        case -332612366: // basedOn
4691          this.getBasedOn().add(TypeConvertor.castToReference(value)); // Reference
4692          return value;
4693        case -1867885268: // subject
4694          this.subject = TypeConvertor.castToReference(value); // Reference
4695          return value;
4696        case 767422259: // participant
4697          this.getParticipant().add((AppointmentParticipantComponent) value); // AppointmentParticipantComponent
4698          return value;
4699        case -362407829: // recurrenceId
4700          this.recurrenceId = TypeConvertor.castToPositiveInt(value); // PositiveIntType
4701          return value;
4702        case 1779864483: // occurrenceChanged
4703          this.occurrenceChanged = TypeConvertor.castToBoolean(value); // BooleanType
4704          return value;
4705        case 597629898: // recurrenceTemplate
4706          this.getRecurrenceTemplate().add((AppointmentRecurrenceTemplateComponent) value); // AppointmentRecurrenceTemplateComponent
4707          return value;
4708        default: return super.setProperty(hash, name, value);
4709        }
4710
4711      }
4712
4713      @Override
4714      public Base setProperty(String name, Base value) throws FHIRException {
4715        if (name.equals("identifier")) {
4716          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
4717        } else if (name.equals("status")) {
4718          value = new AppointmentStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
4719          this.status = (Enumeration) value; // Enumeration<AppointmentStatus>
4720        } else if (name.equals("cancellationReason")) {
4721          this.cancellationReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4722        } else if (name.equals("class")) {
4723          this.getClass_().add(TypeConvertor.castToCodeableConcept(value));
4724        } else if (name.equals("serviceCategory")) {
4725          this.getServiceCategory().add(TypeConvertor.castToCodeableConcept(value));
4726        } else if (name.equals("serviceType")) {
4727          this.getServiceType().add(TypeConvertor.castToCodeableReference(value));
4728        } else if (name.equals("specialty")) {
4729          this.getSpecialty().add(TypeConvertor.castToCodeableConcept(value));
4730        } else if (name.equals("appointmentType")) {
4731          this.appointmentType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4732        } else if (name.equals("reason")) {
4733          this.getReason().add(TypeConvertor.castToCodeableReference(value));
4734        } else if (name.equals("priority")) {
4735          this.priority = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
4736        } else if (name.equals("description")) {
4737          this.description = TypeConvertor.castToString(value); // StringType
4738        } else if (name.equals("replaces")) {
4739          this.getReplaces().add(TypeConvertor.castToReference(value));
4740        } else if (name.equals("virtualService")) {
4741          this.getVirtualService().add(TypeConvertor.castToVirtualServiceDetail(value));
4742        } else if (name.equals("supportingInformation")) {
4743          this.getSupportingInformation().add(TypeConvertor.castToReference(value));
4744        } else if (name.equals("previousAppointment")) {
4745          this.previousAppointment = TypeConvertor.castToReference(value); // Reference
4746        } else if (name.equals("originatingAppointment")) {
4747          this.originatingAppointment = TypeConvertor.castToReference(value); // Reference
4748        } else if (name.equals("start")) {
4749          this.start = TypeConvertor.castToInstant(value); // InstantType
4750        } else if (name.equals("end")) {
4751          this.end = TypeConvertor.castToInstant(value); // InstantType
4752        } else if (name.equals("minutesDuration")) {
4753          this.minutesDuration = TypeConvertor.castToPositiveInt(value); // PositiveIntType
4754        } else if (name.equals("requestedPeriod")) {
4755          this.getRequestedPeriod().add(TypeConvertor.castToPeriod(value));
4756        } else if (name.equals("slot")) {
4757          this.getSlot().add(TypeConvertor.castToReference(value));
4758        } else if (name.equals("account")) {
4759          this.getAccount().add(TypeConvertor.castToReference(value));
4760        } else if (name.equals("created")) {
4761          this.created = TypeConvertor.castToDateTime(value); // DateTimeType
4762        } else if (name.equals("cancellationDate")) {
4763          this.cancellationDate = TypeConvertor.castToDateTime(value); // DateTimeType
4764        } else if (name.equals("note")) {
4765          this.getNote().add(TypeConvertor.castToAnnotation(value));
4766        } else if (name.equals("patientInstruction")) {
4767          this.getPatientInstruction().add(TypeConvertor.castToCodeableReference(value));
4768        } else if (name.equals("basedOn")) {
4769          this.getBasedOn().add(TypeConvertor.castToReference(value));
4770        } else if (name.equals("subject")) {
4771          this.subject = TypeConvertor.castToReference(value); // Reference
4772        } else if (name.equals("participant")) {
4773          this.getParticipant().add((AppointmentParticipantComponent) value);
4774        } else if (name.equals("recurrenceId")) {
4775          this.recurrenceId = TypeConvertor.castToPositiveInt(value); // PositiveIntType
4776        } else if (name.equals("occurrenceChanged")) {
4777          this.occurrenceChanged = TypeConvertor.castToBoolean(value); // BooleanType
4778        } else if (name.equals("recurrenceTemplate")) {
4779          this.getRecurrenceTemplate().add((AppointmentRecurrenceTemplateComponent) value);
4780        } else
4781          return super.setProperty(name, value);
4782        return value;
4783      }
4784
4785      @Override
4786      public Base makeProperty(int hash, String name) throws FHIRException {
4787        switch (hash) {
4788        case -1618432855:  return addIdentifier(); 
4789        case -892481550:  return getStatusElement();
4790        case 2135095591:  return getCancellationReason();
4791        case 94742904:  return addClass_(); 
4792        case 1281188563:  return addServiceCategory(); 
4793        case -1928370289:  return addServiceType(); 
4794        case -1694759682:  return addSpecialty(); 
4795        case -1596426375:  return getAppointmentType();
4796        case -934964668:  return addReason(); 
4797        case -1165461084:  return getPriority();
4798        case -1724546052:  return getDescriptionElement();
4799        case -430332865:  return addReplaces(); 
4800        case 1420774698:  return addVirtualService(); 
4801        case -1248768647:  return addSupportingInformation(); 
4802        case -1676044248:  return getPreviousAppointment();
4803        case 1841882230:  return getOriginatingAppointment();
4804        case 109757538:  return getStartElement();
4805        case 100571:  return getEndElement();
4806        case -413630573:  return getMinutesDurationElement();
4807        case -897241393:  return addRequestedPeriod(); 
4808        case 3533310:  return addSlot(); 
4809        case -1177318867:  return addAccount(); 
4810        case 1028554472:  return getCreatedElement();
4811        case 806269777:  return getCancellationDateElement();
4812        case 3387378:  return addNote(); 
4813        case 737543241:  return addPatientInstruction(); 
4814        case -332612366:  return addBasedOn(); 
4815        case -1867885268:  return getSubject();
4816        case 767422259:  return addParticipant(); 
4817        case -362407829:  return getRecurrenceIdElement();
4818        case 1779864483:  return getOccurrenceChangedElement();
4819        case 597629898:  return addRecurrenceTemplate(); 
4820        default: return super.makeProperty(hash, name);
4821        }
4822
4823      }
4824
4825      @Override
4826      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4827        switch (hash) {
4828        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
4829        case -892481550: /*status*/ return new String[] {"code"};
4830        case 2135095591: /*cancellationReason*/ return new String[] {"CodeableConcept"};
4831        case 94742904: /*class*/ return new String[] {"CodeableConcept"};
4832        case 1281188563: /*serviceCategory*/ return new String[] {"CodeableConcept"};
4833        case -1928370289: /*serviceType*/ return new String[] {"CodeableReference"};
4834        case -1694759682: /*specialty*/ return new String[] {"CodeableConcept"};
4835        case -1596426375: /*appointmentType*/ return new String[] {"CodeableConcept"};
4836        case -934964668: /*reason*/ return new String[] {"CodeableReference"};
4837        case -1165461084: /*priority*/ return new String[] {"CodeableConcept"};
4838        case -1724546052: /*description*/ return new String[] {"string"};
4839        case -430332865: /*replaces*/ return new String[] {"Reference"};
4840        case 1420774698: /*virtualService*/ return new String[] {"VirtualServiceDetail"};
4841        case -1248768647: /*supportingInformation*/ return new String[] {"Reference"};
4842        case -1676044248: /*previousAppointment*/ return new String[] {"Reference"};
4843        case 1841882230: /*originatingAppointment*/ return new String[] {"Reference"};
4844        case 109757538: /*start*/ return new String[] {"instant"};
4845        case 100571: /*end*/ return new String[] {"instant"};
4846        case -413630573: /*minutesDuration*/ return new String[] {"positiveInt"};
4847        case -897241393: /*requestedPeriod*/ return new String[] {"Period"};
4848        case 3533310: /*slot*/ return new String[] {"Reference"};
4849        case -1177318867: /*account*/ return new String[] {"Reference"};
4850        case 1028554472: /*created*/ return new String[] {"dateTime"};
4851        case 806269777: /*cancellationDate*/ return new String[] {"dateTime"};
4852        case 3387378: /*note*/ return new String[] {"Annotation"};
4853        case 737543241: /*patientInstruction*/ return new String[] {"CodeableReference"};
4854        case -332612366: /*basedOn*/ return new String[] {"Reference"};
4855        case -1867885268: /*subject*/ return new String[] {"Reference"};
4856        case 767422259: /*participant*/ return new String[] {};
4857        case -362407829: /*recurrenceId*/ return new String[] {"positiveInt"};
4858        case 1779864483: /*occurrenceChanged*/ return new String[] {"boolean"};
4859        case 597629898: /*recurrenceTemplate*/ return new String[] {};
4860        default: return super.getTypesForProperty(hash, name);
4861        }
4862
4863      }
4864
4865      @Override
4866      public Base addChild(String name) throws FHIRException {
4867        if (name.equals("identifier")) {
4868          return addIdentifier();
4869        }
4870        else if (name.equals("status")) {
4871          throw new FHIRException("Cannot call addChild on a singleton property Appointment.status");
4872        }
4873        else if (name.equals("cancellationReason")) {
4874          this.cancellationReason = new CodeableConcept();
4875          return this.cancellationReason;
4876        }
4877        else if (name.equals("class")) {
4878          return addClass_();
4879        }
4880        else if (name.equals("serviceCategory")) {
4881          return addServiceCategory();
4882        }
4883        else if (name.equals("serviceType")) {
4884          return addServiceType();
4885        }
4886        else if (name.equals("specialty")) {
4887          return addSpecialty();
4888        }
4889        else if (name.equals("appointmentType")) {
4890          this.appointmentType = new CodeableConcept();
4891          return this.appointmentType;
4892        }
4893        else if (name.equals("reason")) {
4894          return addReason();
4895        }
4896        else if (name.equals("priority")) {
4897          this.priority = new CodeableConcept();
4898          return this.priority;
4899        }
4900        else if (name.equals("description")) {
4901          throw new FHIRException("Cannot call addChild on a singleton property Appointment.description");
4902        }
4903        else if (name.equals("replaces")) {
4904          return addReplaces();
4905        }
4906        else if (name.equals("virtualService")) {
4907          return addVirtualService();
4908        }
4909        else if (name.equals("supportingInformation")) {
4910          return addSupportingInformation();
4911        }
4912        else if (name.equals("previousAppointment")) {
4913          this.previousAppointment = new Reference();
4914          return this.previousAppointment;
4915        }
4916        else if (name.equals("originatingAppointment")) {
4917          this.originatingAppointment = new Reference();
4918          return this.originatingAppointment;
4919        }
4920        else if (name.equals("start")) {
4921          throw new FHIRException("Cannot call addChild on a singleton property Appointment.start");
4922        }
4923        else if (name.equals("end")) {
4924          throw new FHIRException("Cannot call addChild on a singleton property Appointment.end");
4925        }
4926        else if (name.equals("minutesDuration")) {
4927          throw new FHIRException("Cannot call addChild on a singleton property Appointment.minutesDuration");
4928        }
4929        else if (name.equals("requestedPeriod")) {
4930          return addRequestedPeriod();
4931        }
4932        else if (name.equals("slot")) {
4933          return addSlot();
4934        }
4935        else if (name.equals("account")) {
4936          return addAccount();
4937        }
4938        else if (name.equals("created")) {
4939          throw new FHIRException("Cannot call addChild on a singleton property Appointment.created");
4940        }
4941        else if (name.equals("cancellationDate")) {
4942          throw new FHIRException("Cannot call addChild on a singleton property Appointment.cancellationDate");
4943        }
4944        else if (name.equals("note")) {
4945          return addNote();
4946        }
4947        else if (name.equals("patientInstruction")) {
4948          return addPatientInstruction();
4949        }
4950        else if (name.equals("basedOn")) {
4951          return addBasedOn();
4952        }
4953        else if (name.equals("subject")) {
4954          this.subject = new Reference();
4955          return this.subject;
4956        }
4957        else if (name.equals("participant")) {
4958          return addParticipant();
4959        }
4960        else if (name.equals("recurrenceId")) {
4961          throw new FHIRException("Cannot call addChild on a singleton property Appointment.recurrenceId");
4962        }
4963        else if (name.equals("occurrenceChanged")) {
4964          throw new FHIRException("Cannot call addChild on a singleton property Appointment.occurrenceChanged");
4965        }
4966        else if (name.equals("recurrenceTemplate")) {
4967          return addRecurrenceTemplate();
4968        }
4969        else
4970          return super.addChild(name);
4971      }
4972
4973  public String fhirType() {
4974    return "Appointment";
4975
4976  }
4977
4978      public Appointment copy() {
4979        Appointment dst = new Appointment();
4980        copyValues(dst);
4981        return dst;
4982      }
4983
4984      public void copyValues(Appointment dst) {
4985        super.copyValues(dst);
4986        if (identifier != null) {
4987          dst.identifier = new ArrayList<Identifier>();
4988          for (Identifier i : identifier)
4989            dst.identifier.add(i.copy());
4990        };
4991        dst.status = status == null ? null : status.copy();
4992        dst.cancellationReason = cancellationReason == null ? null : cancellationReason.copy();
4993        if (class_ != null) {
4994          dst.class_ = new ArrayList<CodeableConcept>();
4995          for (CodeableConcept i : class_)
4996            dst.class_.add(i.copy());
4997        };
4998        if (serviceCategory != null) {
4999          dst.serviceCategory = new ArrayList<CodeableConcept>();
5000          for (CodeableConcept i : serviceCategory)
5001            dst.serviceCategory.add(i.copy());
5002        };
5003        if (serviceType != null) {
5004          dst.serviceType = new ArrayList<CodeableReference>();
5005          for (CodeableReference i : serviceType)
5006            dst.serviceType.add(i.copy());
5007        };
5008        if (specialty != null) {
5009          dst.specialty = new ArrayList<CodeableConcept>();
5010          for (CodeableConcept i : specialty)
5011            dst.specialty.add(i.copy());
5012        };
5013        dst.appointmentType = appointmentType == null ? null : appointmentType.copy();
5014        if (reason != null) {
5015          dst.reason = new ArrayList<CodeableReference>();
5016          for (CodeableReference i : reason)
5017            dst.reason.add(i.copy());
5018        };
5019        dst.priority = priority == null ? null : priority.copy();
5020        dst.description = description == null ? null : description.copy();
5021        if (replaces != null) {
5022          dst.replaces = new ArrayList<Reference>();
5023          for (Reference i : replaces)
5024            dst.replaces.add(i.copy());
5025        };
5026        if (virtualService != null) {
5027          dst.virtualService = new ArrayList<VirtualServiceDetail>();
5028          for (VirtualServiceDetail i : virtualService)
5029            dst.virtualService.add(i.copy());
5030        };
5031        if (supportingInformation != null) {
5032          dst.supportingInformation = new ArrayList<Reference>();
5033          for (Reference i : supportingInformation)
5034            dst.supportingInformation.add(i.copy());
5035        };
5036        dst.previousAppointment = previousAppointment == null ? null : previousAppointment.copy();
5037        dst.originatingAppointment = originatingAppointment == null ? null : originatingAppointment.copy();
5038        dst.start = start == null ? null : start.copy();
5039        dst.end = end == null ? null : end.copy();
5040        dst.minutesDuration = minutesDuration == null ? null : minutesDuration.copy();
5041        if (requestedPeriod != null) {
5042          dst.requestedPeriod = new ArrayList<Period>();
5043          for (Period i : requestedPeriod)
5044            dst.requestedPeriod.add(i.copy());
5045        };
5046        if (slot != null) {
5047          dst.slot = new ArrayList<Reference>();
5048          for (Reference i : slot)
5049            dst.slot.add(i.copy());
5050        };
5051        if (account != null) {
5052          dst.account = new ArrayList<Reference>();
5053          for (Reference i : account)
5054            dst.account.add(i.copy());
5055        };
5056        dst.created = created == null ? null : created.copy();
5057        dst.cancellationDate = cancellationDate == null ? null : cancellationDate.copy();
5058        if (note != null) {
5059          dst.note = new ArrayList<Annotation>();
5060          for (Annotation i : note)
5061            dst.note.add(i.copy());
5062        };
5063        if (patientInstruction != null) {
5064          dst.patientInstruction = new ArrayList<CodeableReference>();
5065          for (CodeableReference i : patientInstruction)
5066            dst.patientInstruction.add(i.copy());
5067        };
5068        if (basedOn != null) {
5069          dst.basedOn = new ArrayList<Reference>();
5070          for (Reference i : basedOn)
5071            dst.basedOn.add(i.copy());
5072        };
5073        dst.subject = subject == null ? null : subject.copy();
5074        if (participant != null) {
5075          dst.participant = new ArrayList<AppointmentParticipantComponent>();
5076          for (AppointmentParticipantComponent i : participant)
5077            dst.participant.add(i.copy());
5078        };
5079        dst.recurrenceId = recurrenceId == null ? null : recurrenceId.copy();
5080        dst.occurrenceChanged = occurrenceChanged == null ? null : occurrenceChanged.copy();
5081        if (recurrenceTemplate != null) {
5082          dst.recurrenceTemplate = new ArrayList<AppointmentRecurrenceTemplateComponent>();
5083          for (AppointmentRecurrenceTemplateComponent i : recurrenceTemplate)
5084            dst.recurrenceTemplate.add(i.copy());
5085        };
5086      }
5087
5088      protected Appointment typedCopy() {
5089        return copy();
5090      }
5091
5092      @Override
5093      public boolean equalsDeep(Base other_) {
5094        if (!super.equalsDeep(other_))
5095          return false;
5096        if (!(other_ instanceof Appointment))
5097          return false;
5098        Appointment o = (Appointment) other_;
5099        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(cancellationReason, o.cancellationReason, true)
5100           && compareDeep(class_, o.class_, true) && compareDeep(serviceCategory, o.serviceCategory, true)
5101           && compareDeep(serviceType, o.serviceType, true) && compareDeep(specialty, o.specialty, true) && compareDeep(appointmentType, o.appointmentType, true)
5102           && compareDeep(reason, o.reason, true) && compareDeep(priority, o.priority, true) && compareDeep(description, o.description, true)
5103           && compareDeep(replaces, o.replaces, true) && compareDeep(virtualService, o.virtualService, true)
5104           && compareDeep(supportingInformation, o.supportingInformation, true) && compareDeep(previousAppointment, o.previousAppointment, true)
5105           && compareDeep(originatingAppointment, o.originatingAppointment, true) && compareDeep(start, o.start, true)
5106           && compareDeep(end, o.end, true) && compareDeep(minutesDuration, o.minutesDuration, true) && compareDeep(requestedPeriod, o.requestedPeriod, true)
5107           && compareDeep(slot, o.slot, true) && compareDeep(account, o.account, true) && compareDeep(created, o.created, true)
5108           && compareDeep(cancellationDate, o.cancellationDate, true) && compareDeep(note, o.note, true) && compareDeep(patientInstruction, o.patientInstruction, true)
5109           && compareDeep(basedOn, o.basedOn, true) && compareDeep(subject, o.subject, true) && compareDeep(participant, o.participant, true)
5110           && compareDeep(recurrenceId, o.recurrenceId, true) && compareDeep(occurrenceChanged, o.occurrenceChanged, true)
5111           && compareDeep(recurrenceTemplate, o.recurrenceTemplate, true);
5112      }
5113
5114      @Override
5115      public boolean equalsShallow(Base other_) {
5116        if (!super.equalsShallow(other_))
5117          return false;
5118        if (!(other_ instanceof Appointment))
5119          return false;
5120        Appointment o = (Appointment) other_;
5121        return compareValues(status, o.status, true) && compareValues(description, o.description, true) && compareValues(start, o.start, true)
5122           && compareValues(end, o.end, true) && compareValues(minutesDuration, o.minutesDuration, true) && compareValues(created, o.created, true)
5123           && compareValues(cancellationDate, o.cancellationDate, true) && compareValues(recurrenceId, o.recurrenceId, true)
5124           && compareValues(occurrenceChanged, o.occurrenceChanged, true);
5125      }
5126
5127      public boolean isEmpty() {
5128        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, cancellationReason
5129          , class_, serviceCategory, serviceType, specialty, appointmentType, reason, priority
5130          , description, replaces, virtualService, supportingInformation, previousAppointment
5131          , originatingAppointment, start, end, minutesDuration, requestedPeriod, slot, account
5132          , created, cancellationDate, note, patientInstruction, basedOn, subject, participant
5133          , recurrenceId, occurrenceChanged, recurrenceTemplate);
5134      }
5135
5136  @Override
5137  public ResourceType getResourceType() {
5138    return ResourceType.Appointment;
5139   }
5140
5141 /**
5142   * Search parameter: <b>actor</b>
5143   * <p>
5144   * Description: <b>Any one of the individuals participating in the appointment</b><br>
5145   * Type: <b>reference</b><br>
5146   * Path: <b>Appointment.participant.actor</b><br>
5147   * </p>
5148   */
5149  @SearchParamDefinition(name="actor", path="Appointment.participant.actor", description="Any one of the individuals participating in the appointment", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
5150  public static final String SP_ACTOR = "actor";
5151 /**
5152   * <b>Fluent Client</b> search parameter constant for <b>actor</b>
5153   * <p>
5154   * Description: <b>Any one of the individuals participating in the appointment</b><br>
5155   * Type: <b>reference</b><br>
5156   * Path: <b>Appointment.participant.actor</b><br>
5157   * </p>
5158   */
5159  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ACTOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ACTOR);
5160
5161/**
5162   * Constant for fluent queries to be used to add include statements. Specifies
5163   * the path value of "<b>Appointment:actor</b>".
5164   */
5165  public static final ca.uhn.fhir.model.api.Include INCLUDE_ACTOR = new ca.uhn.fhir.model.api.Include("Appointment:actor").toLocked();
5166
5167 /**
5168   * Search parameter: <b>appointment-type</b>
5169   * <p>
5170   * Description: <b>The style of appointment or patient that has been booked in the slot (not service type)</b><br>
5171   * Type: <b>token</b><br>
5172   * Path: <b>Appointment.appointmentType</b><br>
5173   * </p>
5174   */
5175  @SearchParamDefinition(name="appointment-type", path="Appointment.appointmentType", description="The style of appointment or patient that has been booked in the slot (not service type)", type="token" )
5176  public static final String SP_APPOINTMENT_TYPE = "appointment-type";
5177 /**
5178   * <b>Fluent Client</b> search parameter constant for <b>appointment-type</b>
5179   * <p>
5180   * Description: <b>The style of appointment or patient that has been booked in the slot (not service type)</b><br>
5181   * Type: <b>token</b><br>
5182   * Path: <b>Appointment.appointmentType</b><br>
5183   * </p>
5184   */
5185  public static final ca.uhn.fhir.rest.gclient.TokenClientParam APPOINTMENT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_APPOINTMENT_TYPE);
5186
5187 /**
5188   * Search parameter: <b>based-on</b>
5189   * <p>
5190   * Description: <b>The service request this appointment is allocated to assess</b><br>
5191   * Type: <b>reference</b><br>
5192   * Path: <b>Appointment.basedOn</b><br>
5193   * </p>
5194   */
5195  @SearchParamDefinition(name="based-on", path="Appointment.basedOn", description="The service request this appointment is allocated to assess", type="reference", target={CarePlan.class, DeviceRequest.class, MedicationRequest.class, ServiceRequest.class } )
5196  public static final String SP_BASED_ON = "based-on";
5197 /**
5198   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
5199   * <p>
5200   * Description: <b>The service request this appointment is allocated to assess</b><br>
5201   * Type: <b>reference</b><br>
5202   * Path: <b>Appointment.basedOn</b><br>
5203   * </p>
5204   */
5205  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
5206
5207/**
5208   * Constant for fluent queries to be used to add include statements. Specifies
5209   * the path value of "<b>Appointment:based-on</b>".
5210   */
5211  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("Appointment:based-on").toLocked();
5212
5213 /**
5214   * Search parameter: <b>group</b>
5215   * <p>
5216   * Description: <b>One of the individuals of the appointment is this patient</b><br>
5217   * Type: <b>reference</b><br>
5218   * Path: <b>Appointment.participant.actor.where(resolve() is Group) | Appointment.subject.where(resolve() is Group)</b><br>
5219   * </p>
5220   */
5221  @SearchParamDefinition(name="group", path="Appointment.participant.actor.where(resolve() is Group) | Appointment.subject.where(resolve() is Group)", description="One of the individuals of the appointment is this patient", type="reference", target={Group.class } )
5222  public static final String SP_GROUP = "group";
5223 /**
5224   * <b>Fluent Client</b> search parameter constant for <b>group</b>
5225   * <p>
5226   * Description: <b>One of the individuals of the appointment is this patient</b><br>
5227   * Type: <b>reference</b><br>
5228   * Path: <b>Appointment.participant.actor.where(resolve() is Group) | Appointment.subject.where(resolve() is Group)</b><br>
5229   * </p>
5230   */
5231  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam GROUP = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_GROUP);
5232
5233/**
5234   * Constant for fluent queries to be used to add include statements. Specifies
5235   * the path value of "<b>Appointment:group</b>".
5236   */
5237  public static final ca.uhn.fhir.model.api.Include INCLUDE_GROUP = new ca.uhn.fhir.model.api.Include("Appointment:group").toLocked();
5238
5239 /**
5240   * Search parameter: <b>location</b>
5241   * <p>
5242   * Description: <b>This location is listed in the participants of the appointment</b><br>
5243   * Type: <b>reference</b><br>
5244   * Path: <b>Appointment.participant.actor.where(resolve() is Location)</b><br>
5245   * </p>
5246   */
5247  @SearchParamDefinition(name="location", path="Appointment.participant.actor.where(resolve() is Location)", description="This location is listed in the participants of the appointment", type="reference", target={Location.class } )
5248  public static final String SP_LOCATION = "location";
5249 /**
5250   * <b>Fluent Client</b> search parameter constant for <b>location</b>
5251   * <p>
5252   * Description: <b>This location is listed in the participants of the appointment</b><br>
5253   * Type: <b>reference</b><br>
5254   * Path: <b>Appointment.participant.actor.where(resolve() is Location)</b><br>
5255   * </p>
5256   */
5257  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
5258
5259/**
5260   * Constant for fluent queries to be used to add include statements. Specifies
5261   * the path value of "<b>Appointment:location</b>".
5262   */
5263  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("Appointment:location").toLocked();
5264
5265 /**
5266   * Search parameter: <b>part-status</b>
5267   * <p>
5268   * Description: <b>The Participation status of the subject, or other participant on the appointment. Can be used to locate participants that have not responded to meeting requests.</b><br>
5269   * Type: <b>token</b><br>
5270   * Path: <b>Appointment.participant.status</b><br>
5271   * </p>
5272   */
5273  @SearchParamDefinition(name="part-status", path="Appointment.participant.status", description="The Participation status of the subject, or other participant on the appointment. Can be used to locate participants that have not responded to meeting requests.", type="token" )
5274  public static final String SP_PART_STATUS = "part-status";
5275 /**
5276   * <b>Fluent Client</b> search parameter constant for <b>part-status</b>
5277   * <p>
5278   * Description: <b>The Participation status of the subject, or other participant on the appointment. Can be used to locate participants that have not responded to meeting requests.</b><br>
5279   * Type: <b>token</b><br>
5280   * Path: <b>Appointment.participant.status</b><br>
5281   * </p>
5282   */
5283  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PART_STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PART_STATUS);
5284
5285 /**
5286   * Search parameter: <b>practitioner</b>
5287   * <p>
5288   * Description: <b>One of the individuals of the appointment is this practitioner</b><br>
5289   * Type: <b>reference</b><br>
5290   * Path: <b>Appointment.participant.actor.where(resolve() is Practitioner)</b><br>
5291   * </p>
5292   */
5293  @SearchParamDefinition(name="practitioner", path="Appointment.participant.actor.where(resolve() is Practitioner)", description="One of the individuals of the appointment is this practitioner", type="reference", target={Practitioner.class } )
5294  public static final String SP_PRACTITIONER = "practitioner";
5295 /**
5296   * <b>Fluent Client</b> search parameter constant for <b>practitioner</b>
5297   * <p>
5298   * Description: <b>One of the individuals of the appointment is this practitioner</b><br>
5299   * Type: <b>reference</b><br>
5300   * Path: <b>Appointment.participant.actor.where(resolve() is Practitioner)</b><br>
5301   * </p>
5302   */
5303  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRACTITIONER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRACTITIONER);
5304
5305/**
5306   * Constant for fluent queries to be used to add include statements. Specifies
5307   * the path value of "<b>Appointment:practitioner</b>".
5308   */
5309  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRACTITIONER = new ca.uhn.fhir.model.api.Include("Appointment:practitioner").toLocked();
5310
5311 /**
5312   * Search parameter: <b>reason-code</b>
5313   * <p>
5314   * Description: <b>Reference to a concept (by class)</b><br>
5315   * Type: <b>token</b><br>
5316   * Path: <b>Appointment.reason.concept</b><br>
5317   * </p>
5318   */
5319  @SearchParamDefinition(name="reason-code", path="Appointment.reason.concept", description="Reference to a concept (by class)", type="token" )
5320  public static final String SP_REASON_CODE = "reason-code";
5321 /**
5322   * <b>Fluent Client</b> search parameter constant for <b>reason-code</b>
5323   * <p>
5324   * Description: <b>Reference to a concept (by class)</b><br>
5325   * Type: <b>token</b><br>
5326   * Path: <b>Appointment.reason.concept</b><br>
5327   * </p>
5328   */
5329  public static final ca.uhn.fhir.rest.gclient.TokenClientParam REASON_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_REASON_CODE);
5330
5331 /**
5332   * Search parameter: <b>reason-reference</b>
5333   * <p>
5334   * Description: <b>Reference to a resource (by instance)</b><br>
5335   * Type: <b>reference</b><br>
5336   * Path: <b>Appointment.reason.reference</b><br>
5337   * </p>
5338   */
5339  @SearchParamDefinition(name="reason-reference", path="Appointment.reason.reference", description="Reference to a resource (by instance)", type="reference", target={Condition.class, ImmunizationRecommendation.class, Observation.class, Procedure.class } )
5340  public static final String SP_REASON_REFERENCE = "reason-reference";
5341 /**
5342   * <b>Fluent Client</b> search parameter constant for <b>reason-reference</b>
5343   * <p>
5344   * Description: <b>Reference to a resource (by instance)</b><br>
5345   * Type: <b>reference</b><br>
5346   * Path: <b>Appointment.reason.reference</b><br>
5347   * </p>
5348   */
5349  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REASON_REFERENCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REASON_REFERENCE);
5350
5351/**
5352   * Constant for fluent queries to be used to add include statements. Specifies
5353   * the path value of "<b>Appointment:reason-reference</b>".
5354   */
5355  public static final ca.uhn.fhir.model.api.Include INCLUDE_REASON_REFERENCE = new ca.uhn.fhir.model.api.Include("Appointment:reason-reference").toLocked();
5356
5357 /**
5358   * Search parameter: <b>requested-period</b>
5359   * <p>
5360   * Description: <b>During what period was the Appointment requested to take place</b><br>
5361   * Type: <b>date</b><br>
5362   * Path: <b>requestedPeriod</b><br>
5363   * </p>
5364   */
5365  @SearchParamDefinition(name="requested-period", path="requestedPeriod", description="During what period was the Appointment requested to take place", type="date" )
5366  public static final String SP_REQUESTED_PERIOD = "requested-period";
5367 /**
5368   * <b>Fluent Client</b> search parameter constant for <b>requested-period</b>
5369   * <p>
5370   * Description: <b>During what period was the Appointment requested to take place</b><br>
5371   * Type: <b>date</b><br>
5372   * Path: <b>requestedPeriod</b><br>
5373   * </p>
5374   */
5375  public static final ca.uhn.fhir.rest.gclient.DateClientParam REQUESTED_PERIOD = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_REQUESTED_PERIOD);
5376
5377 /**
5378   * Search parameter: <b>service-category</b>
5379   * <p>
5380   * Description: <b>A broad categorization of the service that is to be performed during this appointment</b><br>
5381   * Type: <b>token</b><br>
5382   * Path: <b>Appointment.serviceCategory</b><br>
5383   * </p>
5384   */
5385  @SearchParamDefinition(name="service-category", path="Appointment.serviceCategory", description="A broad categorization of the service that is to be performed during this appointment", type="token" )
5386  public static final String SP_SERVICE_CATEGORY = "service-category";
5387 /**
5388   * <b>Fluent Client</b> search parameter constant for <b>service-category</b>
5389   * <p>
5390   * Description: <b>A broad categorization of the service that is to be performed during this appointment</b><br>
5391   * Type: <b>token</b><br>
5392   * Path: <b>Appointment.serviceCategory</b><br>
5393   * </p>
5394   */
5395  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SERVICE_CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SERVICE_CATEGORY);
5396
5397 /**
5398   * Search parameter: <b>service-type-reference</b>
5399   * <p>
5400   * Description: <b>The specific service (by HealthcareService) that is to be performed during this appointment</b><br>
5401   * Type: <b>reference</b><br>
5402   * Path: <b>Appointment.serviceType.reference</b><br>
5403   * </p>
5404   */
5405  @SearchParamDefinition(name="service-type-reference", path="Appointment.serviceType.reference", description="The specific service (by HealthcareService) that is to be performed during this appointment", type="reference", target={HealthcareService.class } )
5406  public static final String SP_SERVICE_TYPE_REFERENCE = "service-type-reference";
5407 /**
5408   * <b>Fluent Client</b> search parameter constant for <b>service-type-reference</b>
5409   * <p>
5410   * Description: <b>The specific service (by HealthcareService) that is to be performed during this appointment</b><br>
5411   * Type: <b>reference</b><br>
5412   * Path: <b>Appointment.serviceType.reference</b><br>
5413   * </p>
5414   */
5415  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SERVICE_TYPE_REFERENCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SERVICE_TYPE_REFERENCE);
5416
5417/**
5418   * Constant for fluent queries to be used to add include statements. Specifies
5419   * the path value of "<b>Appointment:service-type-reference</b>".
5420   */
5421  public static final ca.uhn.fhir.model.api.Include INCLUDE_SERVICE_TYPE_REFERENCE = new ca.uhn.fhir.model.api.Include("Appointment:service-type-reference").toLocked();
5422
5423 /**
5424   * Search parameter: <b>service-type</b>
5425   * <p>
5426   * Description: <b>The specific service (by coding) that is to be performed during this appointment</b><br>
5427   * Type: <b>token</b><br>
5428   * Path: <b>Appointment.serviceType.concept</b><br>
5429   * </p>
5430   */
5431  @SearchParamDefinition(name="service-type", path="Appointment.serviceType.concept", description="The specific service (by coding) that is to be performed during this appointment", type="token" )
5432  public static final String SP_SERVICE_TYPE = "service-type";
5433 /**
5434   * <b>Fluent Client</b> search parameter constant for <b>service-type</b>
5435   * <p>
5436   * Description: <b>The specific service (by coding) that is to be performed during this appointment</b><br>
5437   * Type: <b>token</b><br>
5438   * Path: <b>Appointment.serviceType.concept</b><br>
5439   * </p>
5440   */
5441  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SERVICE_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SERVICE_TYPE);
5442
5443 /**
5444   * Search parameter: <b>slot</b>
5445   * <p>
5446   * Description: <b>The slots that this appointment is filling</b><br>
5447   * Type: <b>reference</b><br>
5448   * Path: <b>Appointment.slot</b><br>
5449   * </p>
5450   */
5451  @SearchParamDefinition(name="slot", path="Appointment.slot", description="The slots that this appointment is filling", type="reference", target={Slot.class } )
5452  public static final String SP_SLOT = "slot";
5453 /**
5454   * <b>Fluent Client</b> search parameter constant for <b>slot</b>
5455   * <p>
5456   * Description: <b>The slots that this appointment is filling</b><br>
5457   * Type: <b>reference</b><br>
5458   * Path: <b>Appointment.slot</b><br>
5459   * </p>
5460   */
5461  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SLOT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SLOT);
5462
5463/**
5464   * Constant for fluent queries to be used to add include statements. Specifies
5465   * the path value of "<b>Appointment:slot</b>".
5466   */
5467  public static final ca.uhn.fhir.model.api.Include INCLUDE_SLOT = new ca.uhn.fhir.model.api.Include("Appointment:slot").toLocked();
5468
5469 /**
5470   * Search parameter: <b>specialty</b>
5471   * <p>
5472   * Description: <b>The specialty of a practitioner that would be required to perform the service requested in this appointment</b><br>
5473   * Type: <b>token</b><br>
5474   * Path: <b>Appointment.specialty</b><br>
5475   * </p>
5476   */
5477  @SearchParamDefinition(name="specialty", path="Appointment.specialty", description="The specialty of a practitioner that would be required to perform the service requested in this appointment", type="token" )
5478  public static final String SP_SPECIALTY = "specialty";
5479 /**
5480   * <b>Fluent Client</b> search parameter constant for <b>specialty</b>
5481   * <p>
5482   * Description: <b>The specialty of a practitioner that would be required to perform the service requested in this appointment</b><br>
5483   * Type: <b>token</b><br>
5484   * Path: <b>Appointment.specialty</b><br>
5485   * </p>
5486   */
5487  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SPECIALTY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SPECIALTY);
5488
5489 /**
5490   * Search parameter: <b>status</b>
5491   * <p>
5492   * Description: <b>The overall status of the appointment</b><br>
5493   * Type: <b>token</b><br>
5494   * Path: <b>Appointment.status</b><br>
5495   * </p>
5496   */
5497  @SearchParamDefinition(name="status", path="Appointment.status", description="The overall status of the appointment", type="token" )
5498  public static final String SP_STATUS = "status";
5499 /**
5500   * <b>Fluent Client</b> search parameter constant for <b>status</b>
5501   * <p>
5502   * Description: <b>The overall status of the appointment</b><br>
5503   * Type: <b>token</b><br>
5504   * Path: <b>Appointment.status</b><br>
5505   * </p>
5506   */
5507  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
5508
5509 /**
5510   * Search parameter: <b>subject</b>
5511   * <p>
5512   * Description: <b>One of the individuals of the appointment is this patient</b><br>
5513   * Type: <b>reference</b><br>
5514   * Path: <b>Appointment.subject</b><br>
5515   * </p>
5516   */
5517  @SearchParamDefinition(name="subject", path="Appointment.subject", description="One of the individuals of the appointment is this patient", type="reference", target={Group.class, Patient.class } )
5518  public static final String SP_SUBJECT = "subject";
5519 /**
5520   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
5521   * <p>
5522   * Description: <b>One of the individuals of the appointment is this patient</b><br>
5523   * Type: <b>reference</b><br>
5524   * Path: <b>Appointment.subject</b><br>
5525   * </p>
5526   */
5527  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
5528
5529/**
5530   * Constant for fluent queries to be used to add include statements. Specifies
5531   * the path value of "<b>Appointment:subject</b>".
5532   */
5533  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Appointment:subject").toLocked();
5534
5535 /**
5536   * Search parameter: <b>supporting-info</b>
5537   * <p>
5538   * Description: <b>Additional information to support the appointment</b><br>
5539   * Type: <b>reference</b><br>
5540   * Path: <b>Appointment.supportingInformation</b><br>
5541   * </p>
5542   */
5543  @SearchParamDefinition(name="supporting-info", path="Appointment.supportingInformation", description="Additional information to support the appointment", type="reference", target={Account.class, ActivityDefinition.class, ActorDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BiologicallyDerivedProductDispense.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceAssociation.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentReference.class, Encounter.class, EncounterHistory.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, GenomicStudy.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryItem.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationStatement.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Parameters.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestOrchestration.class, Requirements.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestPlan.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
5544  public static final String SP_SUPPORTING_INFO = "supporting-info";
5545 /**
5546   * <b>Fluent Client</b> search parameter constant for <b>supporting-info</b>
5547   * <p>
5548   * Description: <b>Additional information to support the appointment</b><br>
5549   * Type: <b>reference</b><br>
5550   * Path: <b>Appointment.supportingInformation</b><br>
5551   * </p>
5552   */
5553  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUPPORTING_INFO = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUPPORTING_INFO);
5554
5555/**
5556   * Constant for fluent queries to be used to add include statements. Specifies
5557   * the path value of "<b>Appointment:supporting-info</b>".
5558   */
5559  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUPPORTING_INFO = new ca.uhn.fhir.model.api.Include("Appointment:supporting-info").toLocked();
5560
5561 /**
5562   * Search parameter: <b>date</b>
5563   * <p>
5564   * Description: <b>Multiple Resources: 
5565
5566* [AdverseEvent](adverseevent.html): When the event occurred
5567* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
5568* [Appointment](appointment.html): Appointment date/time.
5569* [AuditEvent](auditevent.html): Time when the event was recorded
5570* [CarePlan](careplan.html): Time period plan covers
5571* [CareTeam](careteam.html): A date within the coverage time period.
5572* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
5573* [Composition](composition.html): Composition editing time
5574* [Consent](consent.html): When consent was agreed to
5575* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
5576* [DocumentReference](documentreference.html): When this document reference was created
5577* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
5578* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
5579* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
5580* [Flag](flag.html): Time period when flag is active
5581* [Immunization](immunization.html): Vaccination  (non)-Administration Date
5582* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated
5583* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created
5584* [Invoice](invoice.html): Invoice date / posting date
5585* [List](list.html): When the list was prepared
5586* [MeasureReport](measurereport.html): The date of the measure report
5587* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication
5588* [Observation](observation.html): Clinically relevant time/time-period for observation
5589* [Procedure](procedure.html): When the procedure occurred or is occurring
5590* [ResearchSubject](researchsubject.html): Start and end of participation
5591* [RiskAssessment](riskassessment.html): When was assessment made?
5592* [SupplyRequest](supplyrequest.html): When the request was made
5593</b><br>
5594   * Type: <b>date</b><br>
5595   * Path: <b>AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn</b><br>
5596   * </p>
5597   */
5598  @SearchParamDefinition(name="date", path="AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn", description="Multiple Resources: \r\n\r\n* [AdverseEvent](adverseevent.html): When the event occurred\r\n* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded\r\n* [Appointment](appointment.html): Appointment date/time.\r\n* [AuditEvent](auditevent.html): Time when the event was recorded\r\n* [CarePlan](careplan.html): Time period plan covers\r\n* [CareTeam](careteam.html): A date within the coverage time period.\r\n* [ClinicalImpression](clinicalimpression.html): When the assessment was documented\r\n* [Composition](composition.html): Composition editing time\r\n* [Consent](consent.html): When consent was agreed to\r\n* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report\r\n* [DocumentReference](documentreference.html): When this document reference was created\r\n* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted\r\n* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period\r\n* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated\r\n* [Flag](flag.html): Time period when flag is active\r\n* [Immunization](immunization.html): Vaccination  (non)-Administration Date\r\n* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated\r\n* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created\r\n* [Invoice](invoice.html): Invoice date / posting date\r\n* [List](list.html): When the list was prepared\r\n* [MeasureReport](measurereport.html): The date of the measure report\r\n* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication\r\n* [Observation](observation.html): Clinically relevant time/time-period for observation\r\n* [Procedure](procedure.html): When the procedure occurred or is occurring\r\n* [ResearchSubject](researchsubject.html): Start and end of participation\r\n* [RiskAssessment](riskassessment.html): When was assessment made?\r\n* [SupplyRequest](supplyrequest.html): When the request was made\r\n", type="date" )
5599  public static final String SP_DATE = "date";
5600 /**
5601   * <b>Fluent Client</b> search parameter constant for <b>date</b>
5602   * <p>
5603   * Description: <b>Multiple Resources: 
5604
5605* [AdverseEvent](adverseevent.html): When the event occurred
5606* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
5607* [Appointment](appointment.html): Appointment date/time.
5608* [AuditEvent](auditevent.html): Time when the event was recorded
5609* [CarePlan](careplan.html): Time period plan covers
5610* [CareTeam](careteam.html): A date within the coverage time period.
5611* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
5612* [Composition](composition.html): Composition editing time
5613* [Consent](consent.html): When consent was agreed to
5614* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
5615* [DocumentReference](documentreference.html): When this document reference was created
5616* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
5617* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
5618* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
5619* [Flag](flag.html): Time period when flag is active
5620* [Immunization](immunization.html): Vaccination  (non)-Administration Date
5621* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated
5622* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created
5623* [Invoice](invoice.html): Invoice date / posting date
5624* [List](list.html): When the list was prepared
5625* [MeasureReport](measurereport.html): The date of the measure report
5626* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication
5627* [Observation](observation.html): Clinically relevant time/time-period for observation
5628* [Procedure](procedure.html): When the procedure occurred or is occurring
5629* [ResearchSubject](researchsubject.html): Start and end of participation
5630* [RiskAssessment](riskassessment.html): When was assessment made?
5631* [SupplyRequest](supplyrequest.html): When the request was made
5632</b><br>
5633   * Type: <b>date</b><br>
5634   * Path: <b>AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn</b><br>
5635   * </p>
5636   */
5637  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
5638
5639 /**
5640   * Search parameter: <b>identifier</b>
5641   * <p>
5642   * Description: <b>Multiple Resources: 
5643
5644* [Account](account.html): Account number
5645* [AdverseEvent](adverseevent.html): Business identifier for the event
5646* [AllergyIntolerance](allergyintolerance.html): External ids for this item
5647* [Appointment](appointment.html): An Identifier of the Appointment
5648* [AppointmentResponse](appointmentresponse.html): An Identifier in this appointment response
5649* [Basic](basic.html): Business identifier
5650* [BodyStructure](bodystructure.html): Bodystructure identifier
5651* [CarePlan](careplan.html): External Ids for this plan
5652* [CareTeam](careteam.html): External Ids for this team
5653* [ChargeItem](chargeitem.html): Business Identifier for item
5654* [Claim](claim.html): The primary identifier of the financial resource
5655* [ClaimResponse](claimresponse.html): The identity of the ClaimResponse
5656* [ClinicalImpression](clinicalimpression.html): Business identifier
5657* [Communication](communication.html): Unique identifier
5658* [CommunicationRequest](communicationrequest.html): Unique identifier
5659* [Composition](composition.html): Version-independent identifier for the Composition
5660* [Condition](condition.html): A unique identifier of the condition record
5661* [Consent](consent.html): Identifier for this record (external references)
5662* [Contract](contract.html): The identity of the contract
5663* [Coverage](coverage.html): The primary identifier of the insured and the coverage
5664* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The business identifier of the Eligibility
5665* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The business identifier
5666* [DetectedIssue](detectedissue.html): Unique id for the detected issue
5667* [DeviceRequest](devicerequest.html): Business identifier for request/order
5668* [DeviceUsage](deviceusage.html): Search by identifier
5669* [DiagnosticReport](diagnosticreport.html): An identifier for the report
5670* [DocumentReference](documentreference.html): Identifier of the attachment binary
5671* [Encounter](encounter.html): Identifier(s) by which this encounter is known
5672* [EnrollmentRequest](enrollmentrequest.html): The business identifier of the Enrollment
5673* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
5674* [ExplanationOfBenefit](explanationofbenefit.html): The business identifier of the Explanation of Benefit
5675* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
5676* [Flag](flag.html): Business identifier
5677* [Goal](goal.html): External Ids for this goal
5678* [GuidanceResponse](guidanceresponse.html): The identifier of the guidance response
5679* [ImagingSelection](imagingselection.html): Identifiers for the imaging selection
5680* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID
5681* [Immunization](immunization.html): Business identifier
5682* [ImmunizationEvaluation](immunizationevaluation.html): ID of the evaluation
5683* [ImmunizationRecommendation](immunizationrecommendation.html): Business identifier
5684* [Invoice](invoice.html): Business Identifier for item
5685* [List](list.html): Business identifier
5686* [MeasureReport](measurereport.html): External identifier of the measure report to be returned
5687* [Medication](medication.html): Returns medications with this external identifier
5688* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
5689* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
5690* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
5691* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
5692* [MolecularSequence](molecularsequence.html): The unique identity for a particular sequence
5693* [NutritionIntake](nutritionintake.html): Return statements with this external identifier
5694* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
5695* [Observation](observation.html): The unique id for a particular observation
5696* [Person](person.html): A person Identifier
5697* [Procedure](procedure.html): A unique identifier for a procedure
5698* [QuestionnaireResponse](questionnaireresponse.html): The unique identifier for the questionnaire response
5699* [RelatedPerson](relatedperson.html): An Identifier of the RelatedPerson
5700* [RequestOrchestration](requestorchestration.html): External identifiers for the request orchestration
5701* [ResearchSubject](researchsubject.html): Business Identifier for research subject in a study
5702* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
5703* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
5704* [Specimen](specimen.html): The unique identifier associated with the specimen
5705* [SupplyDelivery](supplydelivery.html): External identifier
5706* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
5707* [Task](task.html): Search for a task instance by its business identifier
5708* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
5709</b><br>
5710   * Type: <b>token</b><br>
5711   * Path: <b>Account.identifier | AdverseEvent.identifier | AllergyIntolerance.identifier | Appointment.identifier | AppointmentResponse.identifier | Basic.identifier | BodyStructure.identifier | CarePlan.identifier | CareTeam.identifier | ChargeItem.identifier | Claim.identifier | ClaimResponse.identifier | ClinicalImpression.identifier | Communication.identifier | CommunicationRequest.identifier | Composition.identifier | Condition.identifier | Consent.identifier | Contract.identifier | Coverage.identifier | CoverageEligibilityRequest.identifier | CoverageEligibilityResponse.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DeviceUsage.identifier | DiagnosticReport.identifier | DocumentReference.identifier | Encounter.identifier | EnrollmentRequest.identifier | EpisodeOfCare.identifier | ExplanationOfBenefit.identifier | FamilyMemberHistory.identifier | Flag.identifier | Goal.identifier | GuidanceResponse.identifier | ImagingSelection.identifier | ImagingStudy.identifier | Immunization.identifier | ImmunizationEvaluation.identifier | ImmunizationRecommendation.identifier | Invoice.identifier | List.identifier | MeasureReport.identifier | Medication.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | MolecularSequence.identifier | NutritionIntake.identifier | NutritionOrder.identifier | Observation.identifier | Person.identifier | Procedure.identifier | QuestionnaireResponse.identifier | RelatedPerson.identifier | RequestOrchestration.identifier | ResearchSubject.identifier | RiskAssessment.identifier | ServiceRequest.identifier | Specimen.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | Task.identifier | VisionPrescription.identifier</b><br>
5712   * </p>
5713   */
5714  @SearchParamDefinition(name="identifier", path="Account.identifier | AdverseEvent.identifier | AllergyIntolerance.identifier | Appointment.identifier | AppointmentResponse.identifier | Basic.identifier | BodyStructure.identifier | CarePlan.identifier | CareTeam.identifier | ChargeItem.identifier | Claim.identifier | ClaimResponse.identifier | ClinicalImpression.identifier | Communication.identifier | CommunicationRequest.identifier | Composition.identifier | Condition.identifier | Consent.identifier | Contract.identifier | Coverage.identifier | CoverageEligibilityRequest.identifier | CoverageEligibilityResponse.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DeviceUsage.identifier | DiagnosticReport.identifier | DocumentReference.identifier | Encounter.identifier | EnrollmentRequest.identifier | EpisodeOfCare.identifier | ExplanationOfBenefit.identifier | FamilyMemberHistory.identifier | Flag.identifier | Goal.identifier | GuidanceResponse.identifier | ImagingSelection.identifier | ImagingStudy.identifier | Immunization.identifier | ImmunizationEvaluation.identifier | ImmunizationRecommendation.identifier | Invoice.identifier | List.identifier | MeasureReport.identifier | Medication.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | MolecularSequence.identifier | NutritionIntake.identifier | NutritionOrder.identifier | Observation.identifier | Person.identifier | Procedure.identifier | QuestionnaireResponse.identifier | RelatedPerson.identifier | RequestOrchestration.identifier | ResearchSubject.identifier | RiskAssessment.identifier | ServiceRequest.identifier | Specimen.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | Task.identifier | VisionPrescription.identifier", description="Multiple Resources: \r\n\r\n* [Account](account.html): Account number\r\n* [AdverseEvent](adverseevent.html): Business identifier for the event\r\n* [AllergyIntolerance](allergyintolerance.html): External ids for this item\r\n* [Appointment](appointment.html): An Identifier of the Appointment\r\n* [AppointmentResponse](appointmentresponse.html): An Identifier in this appointment response\r\n* [Basic](basic.html): Business identifier\r\n* [BodyStructure](bodystructure.html): Bodystructure identifier\r\n* [CarePlan](careplan.html): External Ids for this plan\r\n* [CareTeam](careteam.html): External Ids for this team\r\n* [ChargeItem](chargeitem.html): Business Identifier for item\r\n* [Claim](claim.html): The primary identifier of the financial resource\r\n* [ClaimResponse](claimresponse.html): The identity of the ClaimResponse\r\n* [ClinicalImpression](clinicalimpression.html): Business identifier\r\n* [Communication](communication.html): Unique identifier\r\n* [CommunicationRequest](communicationrequest.html): Unique identifier\r\n* [Composition](composition.html): Version-independent identifier for the Composition\r\n* [Condition](condition.html): A unique identifier of the condition record\r\n* [Consent](consent.html): Identifier for this record (external references)\r\n* [Contract](contract.html): The identity of the contract\r\n* [Coverage](coverage.html): The primary identifier of the insured and the coverage\r\n* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The business identifier of the Eligibility\r\n* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The business identifier\r\n* [DetectedIssue](detectedissue.html): Unique id for the detected issue\r\n* [DeviceRequest](devicerequest.html): Business identifier for request/order\r\n* [DeviceUsage](deviceusage.html): Search by identifier\r\n* [DiagnosticReport](diagnosticreport.html): An identifier for the report\r\n* [DocumentReference](documentreference.html): Identifier of the attachment binary\r\n* [Encounter](encounter.html): Identifier(s) by which this encounter is known\r\n* [EnrollmentRequest](enrollmentrequest.html): The business identifier of the Enrollment\r\n* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare\r\n* [ExplanationOfBenefit](explanationofbenefit.html): The business identifier of the Explanation of Benefit\r\n* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier\r\n* [Flag](flag.html): Business identifier\r\n* [Goal](goal.html): External Ids for this goal\r\n* [GuidanceResponse](guidanceresponse.html): The identifier of the guidance response\r\n* [ImagingSelection](imagingselection.html): Identifiers for the imaging selection\r\n* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID\r\n* [Immunization](immunization.html): Business identifier\r\n* [ImmunizationEvaluation](immunizationevaluation.html): ID of the evaluation\r\n* [ImmunizationRecommendation](immunizationrecommendation.html): Business identifier\r\n* [Invoice](invoice.html): Business Identifier for item\r\n* [List](list.html): Business identifier\r\n* [MeasureReport](measurereport.html): External identifier of the measure report to be returned\r\n* [Medication](medication.html): Returns medications with this external identifier\r\n* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier\r\n* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier\r\n* [MedicationStatement](medicationstatement.html): Return statements with this external identifier\r\n* [MolecularSequence](molecularsequence.html): The unique identity for a particular sequence\r\n* [NutritionIntake](nutritionintake.html): Return statements with this external identifier\r\n* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier\r\n* [Observation](observation.html): The unique id for a particular observation\r\n* [Person](person.html): A person Identifier\r\n* [Procedure](procedure.html): A unique identifier for a procedure\r\n* [QuestionnaireResponse](questionnaireresponse.html): The unique identifier for the questionnaire response\r\n* [RelatedPerson](relatedperson.html): An Identifier of the RelatedPerson\r\n* [RequestOrchestration](requestorchestration.html): External identifiers for the request orchestration\r\n* [ResearchSubject](researchsubject.html): Business Identifier for research subject in a study\r\n* [RiskAssessment](riskassessment.html): Unique identifier for the assessment\r\n* [ServiceRequest](servicerequest.html): Identifiers assigned to this order\r\n* [Specimen](specimen.html): The unique identifier associated with the specimen\r\n* [SupplyDelivery](supplydelivery.html): External identifier\r\n* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest\r\n* [Task](task.html): Search for a task instance by its business identifier\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier\r\n", type="token" )
5715  public static final String SP_IDENTIFIER = "identifier";
5716 /**
5717   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
5718   * <p>
5719   * Description: <b>Multiple Resources: 
5720
5721* [Account](account.html): Account number
5722* [AdverseEvent](adverseevent.html): Business identifier for the event
5723* [AllergyIntolerance](allergyintolerance.html): External ids for this item
5724* [Appointment](appointment.html): An Identifier of the Appointment
5725* [AppointmentResponse](appointmentresponse.html): An Identifier in this appointment response
5726* [Basic](basic.html): Business identifier
5727* [BodyStructure](bodystructure.html): Bodystructure identifier
5728* [CarePlan](careplan.html): External Ids for this plan
5729* [CareTeam](careteam.html): External Ids for this team
5730* [ChargeItem](chargeitem.html): Business Identifier for item
5731* [Claim](claim.html): The primary identifier of the financial resource
5732* [ClaimResponse](claimresponse.html): The identity of the ClaimResponse
5733* [ClinicalImpression](clinicalimpression.html): Business identifier
5734* [Communication](communication.html): Unique identifier
5735* [CommunicationRequest](communicationrequest.html): Unique identifier
5736* [Composition](composition.html): Version-independent identifier for the Composition
5737* [Condition](condition.html): A unique identifier of the condition record
5738* [Consent](consent.html): Identifier for this record (external references)
5739* [Contract](contract.html): The identity of the contract
5740* [Coverage](coverage.html): The primary identifier of the insured and the coverage
5741* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The business identifier of the Eligibility
5742* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The business identifier
5743* [DetectedIssue](detectedissue.html): Unique id for the detected issue
5744* [DeviceRequest](devicerequest.html): Business identifier for request/order
5745* [DeviceUsage](deviceusage.html): Search by identifier
5746* [DiagnosticReport](diagnosticreport.html): An identifier for the report
5747* [DocumentReference](documentreference.html): Identifier of the attachment binary
5748* [Encounter](encounter.html): Identifier(s) by which this encounter is known
5749* [EnrollmentRequest](enrollmentrequest.html): The business identifier of the Enrollment
5750* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
5751* [ExplanationOfBenefit](explanationofbenefit.html): The business identifier of the Explanation of Benefit
5752* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
5753* [Flag](flag.html): Business identifier
5754* [Goal](goal.html): External Ids for this goal
5755* [GuidanceResponse](guidanceresponse.html): The identifier of the guidance response
5756* [ImagingSelection](imagingselection.html): Identifiers for the imaging selection
5757* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID
5758* [Immunization](immunization.html): Business identifier
5759* [ImmunizationEvaluation](immunizationevaluation.html): ID of the evaluation
5760* [ImmunizationRecommendation](immunizationrecommendation.html): Business identifier
5761* [Invoice](invoice.html): Business Identifier for item
5762* [List](list.html): Business identifier
5763* [MeasureReport](measurereport.html): External identifier of the measure report to be returned
5764* [Medication](medication.html): Returns medications with this external identifier
5765* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
5766* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
5767* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
5768* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
5769* [MolecularSequence](molecularsequence.html): The unique identity for a particular sequence
5770* [NutritionIntake](nutritionintake.html): Return statements with this external identifier
5771* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
5772* [Observation](observation.html): The unique id for a particular observation
5773* [Person](person.html): A person Identifier
5774* [Procedure](procedure.html): A unique identifier for a procedure
5775* [QuestionnaireResponse](questionnaireresponse.html): The unique identifier for the questionnaire response
5776* [RelatedPerson](relatedperson.html): An Identifier of the RelatedPerson
5777* [RequestOrchestration](requestorchestration.html): External identifiers for the request orchestration
5778* [ResearchSubject](researchsubject.html): Business Identifier for research subject in a study
5779* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
5780* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
5781* [Specimen](specimen.html): The unique identifier associated with the specimen
5782* [SupplyDelivery](supplydelivery.html): External identifier
5783* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
5784* [Task](task.html): Search for a task instance by its business identifier
5785* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
5786</b><br>
5787   * Type: <b>token</b><br>
5788   * Path: <b>Account.identifier | AdverseEvent.identifier | AllergyIntolerance.identifier | Appointment.identifier | AppointmentResponse.identifier | Basic.identifier | BodyStructure.identifier | CarePlan.identifier | CareTeam.identifier | ChargeItem.identifier | Claim.identifier | ClaimResponse.identifier | ClinicalImpression.identifier | Communication.identifier | CommunicationRequest.identifier | Composition.identifier | Condition.identifier | Consent.identifier | Contract.identifier | Coverage.identifier | CoverageEligibilityRequest.identifier | CoverageEligibilityResponse.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DeviceUsage.identifier | DiagnosticReport.identifier | DocumentReference.identifier | Encounter.identifier | EnrollmentRequest.identifier | EpisodeOfCare.identifier | ExplanationOfBenefit.identifier | FamilyMemberHistory.identifier | Flag.identifier | Goal.identifier | GuidanceResponse.identifier | ImagingSelection.identifier | ImagingStudy.identifier | Immunization.identifier | ImmunizationEvaluation.identifier | ImmunizationRecommendation.identifier | Invoice.identifier | List.identifier | MeasureReport.identifier | Medication.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | MolecularSequence.identifier | NutritionIntake.identifier | NutritionOrder.identifier | Observation.identifier | Person.identifier | Procedure.identifier | QuestionnaireResponse.identifier | RelatedPerson.identifier | RequestOrchestration.identifier | ResearchSubject.identifier | RiskAssessment.identifier | ServiceRequest.identifier | Specimen.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | Task.identifier | VisionPrescription.identifier</b><br>
5789   * </p>
5790   */
5791  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
5792
5793 /**
5794   * Search parameter: <b>patient</b>
5795   * <p>
5796   * Description: <b>Multiple Resources: 
5797
5798* [Account](account.html): The entity that caused the expenses
5799* [AdverseEvent](adverseevent.html): Subject impacted by event
5800* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
5801* [Appointment](appointment.html): One of the individuals of the appointment is this patient
5802* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient
5803* [AuditEvent](auditevent.html): Where the activity involved patient data
5804* [Basic](basic.html): Identifies the focus of this resource
5805* [BodyStructure](bodystructure.html): Who this is about
5806* [CarePlan](careplan.html): Who the care plan is for
5807* [CareTeam](careteam.html): Who care team is for
5808* [ChargeItem](chargeitem.html): Individual service was done for/to
5809* [Claim](claim.html): Patient receiving the products or services
5810* [ClaimResponse](claimresponse.html): The subject of care
5811* [ClinicalImpression](clinicalimpression.html): Patient assessed
5812* [Communication](communication.html): Focus of message
5813* [CommunicationRequest](communicationrequest.html): Focus of message
5814* [Composition](composition.html): Who and/or what the composition is about
5815* [Condition](condition.html): Who has the condition?
5816* [Consent](consent.html): Who the consent applies to
5817* [Contract](contract.html): The identity of the subject of the contract (if a patient)
5818* [Coverage](coverage.html): Retrieve coverages for a patient
5819* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient
5820* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient
5821* [DetectedIssue](detectedissue.html): Associated patient
5822* [DeviceRequest](devicerequest.html): Individual the service is ordered for
5823* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
5824* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
5825* [DocumentReference](documentreference.html): Who/what is the subject of the document
5826* [Encounter](encounter.html): The patient present at the encounter
5827* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled
5828* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
5829* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient
5830* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
5831* [Flag](flag.html): The identity of a subject to list flags for
5832* [Goal](goal.html): Who this goal is intended for
5833* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results
5834* [ImagingSelection](imagingselection.html): Who the study is about
5835* [ImagingStudy](imagingstudy.html): Who the study is about
5836* [Immunization](immunization.html): The patient for the vaccination record
5837* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated
5838* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for
5839* [Invoice](invoice.html): Recipient(s) of goods and services
5840* [List](list.html): If all resources have the same subject
5841* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for
5842* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
5843* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
5844* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
5845* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
5846* [MolecularSequence](molecularsequence.html): The subject that the sequence is about
5847* [NutritionIntake](nutritionintake.html): Returns statements for a specific patient.
5848* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement
5849* [Observation](observation.html): The subject that the observation is about (if patient)
5850* [Person](person.html): The Person links to this Patient
5851* [Procedure](procedure.html): Search by subject - a patient
5852* [Provenance](provenance.html): Where the activity involved patient data
5853* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response
5854* [RelatedPerson](relatedperson.html): The patient this related person is related to
5855* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations
5856* [ResearchSubject](researchsubject.html): Who or what is part of study
5857* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
5858* [ServiceRequest](servicerequest.html): Search by subject - a patient
5859* [Specimen](specimen.html): The patient the specimen comes from
5860* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
5861* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined
5862* [Task](task.html): Search by patient
5863* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
5864</b><br>
5865   * Type: <b>reference</b><br>
5866   * Path: <b>Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient</b><br>
5867   * </p>
5868   */
5869  @SearchParamDefinition(name="patient", path="Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient", description="Multiple Resources: \r\n\r\n* [Account](account.html): The entity that caused the expenses\r\n* [AdverseEvent](adverseevent.html): Subject impacted by event\r\n* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for\r\n* [Appointment](appointment.html): One of the individuals of the appointment is this patient\r\n* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient\r\n* [AuditEvent](auditevent.html): Where the activity involved patient data\r\n* [Basic](basic.html): Identifies the focus of this resource\r\n* [BodyStructure](bodystructure.html): Who this is about\r\n* [CarePlan](careplan.html): Who the care plan is for\r\n* [CareTeam](careteam.html): Who care team is for\r\n* [ChargeItem](chargeitem.html): Individual service was done for/to\r\n* [Claim](claim.html): Patient receiving the products or services\r\n* [ClaimResponse](claimresponse.html): The subject of care\r\n* [ClinicalImpression](clinicalimpression.html): Patient assessed\r\n* [Communication](communication.html): Focus of message\r\n* [CommunicationRequest](communicationrequest.html): Focus of message\r\n* [Composition](composition.html): Who and/or what the composition is about\r\n* [Condition](condition.html): Who has the condition?\r\n* [Consent](consent.html): Who the consent applies to\r\n* [Contract](contract.html): The identity of the subject of the contract (if a patient)\r\n* [Coverage](coverage.html): Retrieve coverages for a patient\r\n* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient\r\n* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient\r\n* [DetectedIssue](detectedissue.html): Associated patient\r\n* [DeviceRequest](devicerequest.html): Individual the service is ordered for\r\n* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device\r\n* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient\r\n* [DocumentReference](documentreference.html): Who/what is the subject of the document\r\n* [Encounter](encounter.html): The patient present at the encounter\r\n* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled\r\n* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care\r\n* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient\r\n* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for\r\n* [Flag](flag.html): The identity of a subject to list flags for\r\n* [Goal](goal.html): Who this goal is intended for\r\n* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results\r\n* [ImagingSelection](imagingselection.html): Who the study is about\r\n* [ImagingStudy](imagingstudy.html): Who the study is about\r\n* [Immunization](immunization.html): The patient for the vaccination record\r\n* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated\r\n* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for\r\n* [Invoice](invoice.html): Recipient(s) of goods and services\r\n* [List](list.html): If all resources have the same subject\r\n* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for\r\n* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for\r\n* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for\r\n* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient\r\n* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.\r\n* [MolecularSequence](molecularsequence.html): The subject that the sequence is about\r\n* [NutritionIntake](nutritionintake.html): Returns statements for a specific patient.\r\n* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement\r\n* [Observation](observation.html): The subject that the observation is about (if patient)\r\n* [Person](person.html): The Person links to this Patient\r\n* [Procedure](procedure.html): Search by subject - a patient\r\n* [Provenance](provenance.html): Where the activity involved patient data\r\n* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response\r\n* [RelatedPerson](relatedperson.html): The patient this related person is related to\r\n* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations\r\n* [ResearchSubject](researchsubject.html): Who or what is part of study\r\n* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?\r\n* [ServiceRequest](servicerequest.html): Search by subject - a patient\r\n* [Specimen](specimen.html): The patient the specimen comes from\r\n* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied\r\n* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined\r\n* [Task](task.html): Search by patient\r\n* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for\r\n", type="reference", target={Patient.class } )
5870  public static final String SP_PATIENT = "patient";
5871 /**
5872   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
5873   * <p>
5874   * Description: <b>Multiple Resources: 
5875
5876* [Account](account.html): The entity that caused the expenses
5877* [AdverseEvent](adverseevent.html): Subject impacted by event
5878* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
5879* [Appointment](appointment.html): One of the individuals of the appointment is this patient
5880* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient
5881* [AuditEvent](auditevent.html): Where the activity involved patient data
5882* [Basic](basic.html): Identifies the focus of this resource
5883* [BodyStructure](bodystructure.html): Who this is about
5884* [CarePlan](careplan.html): Who the care plan is for
5885* [CareTeam](careteam.html): Who care team is for
5886* [ChargeItem](chargeitem.html): Individual service was done for/to
5887* [Claim](claim.html): Patient receiving the products or services
5888* [ClaimResponse](claimresponse.html): The subject of care
5889* [ClinicalImpression](clinicalimpression.html): Patient assessed
5890* [Communication](communication.html): Focus of message
5891* [CommunicationRequest](communicationrequest.html): Focus of message
5892* [Composition](composition.html): Who and/or what the composition is about
5893* [Condition](condition.html): Who has the condition?
5894* [Consent](consent.html): Who the consent applies to
5895* [Contract](contract.html): The identity of the subject of the contract (if a patient)
5896* [Coverage](coverage.html): Retrieve coverages for a patient
5897* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient
5898* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient
5899* [DetectedIssue](detectedissue.html): Associated patient
5900* [DeviceRequest](devicerequest.html): Individual the service is ordered for
5901* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
5902* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
5903* [DocumentReference](documentreference.html): Who/what is the subject of the document
5904* [Encounter](encounter.html): The patient present at the encounter
5905* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled
5906* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
5907* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient
5908* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
5909* [Flag](flag.html): The identity of a subject to list flags for
5910* [Goal](goal.html): Who this goal is intended for
5911* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results
5912* [ImagingSelection](imagingselection.html): Who the study is about
5913* [ImagingStudy](imagingstudy.html): Who the study is about
5914* [Immunization](immunization.html): The patient for the vaccination record
5915* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated
5916* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for
5917* [Invoice](invoice.html): Recipient(s) of goods and services
5918* [List](list.html): If all resources have the same subject
5919* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for
5920* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
5921* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
5922* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
5923* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
5924* [MolecularSequence](molecularsequence.html): The subject that the sequence is about
5925* [NutritionIntake](nutritionintake.html): Returns statements for a specific patient.
5926* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement
5927* [Observation](observation.html): The subject that the observation is about (if patient)
5928* [Person](person.html): The Person links to this Patient
5929* [Procedure](procedure.html): Search by subject - a patient
5930* [Provenance](provenance.html): Where the activity involved patient data
5931* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response
5932* [RelatedPerson](relatedperson.html): The patient this related person is related to
5933* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations
5934* [ResearchSubject](researchsubject.html): Who or what is part of study
5935* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
5936* [ServiceRequest](servicerequest.html): Search by subject - a patient
5937* [Specimen](specimen.html): The patient the specimen comes from
5938* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
5939* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined
5940* [Task](task.html): Search by patient
5941* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
5942</b><br>
5943   * Type: <b>reference</b><br>
5944   * Path: <b>Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient</b><br>
5945   * </p>
5946   */
5947  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
5948
5949/**
5950   * Constant for fluent queries to be used to add include statements. Specifies
5951   * the path value of "<b>Appointment:patient</b>".
5952   */
5953  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Appointment:patient").toLocked();
5954
5955
5956}
5957