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