001package org.hl7.fhir.dstu3.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.Date;
037import java.util.List;
038
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
041import org.hl7.fhir.utilities.Utilities;
042
043import ca.uhn.fhir.model.api.annotation.Block;
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.ResourceDef;
047import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
048/**
049 * A 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).
050 */
051@ResourceDef(name="Appointment", profile="http://hl7.org/fhir/Profile/Appointment")
052public class Appointment extends DomainResource {
053
054    public enum AppointmentStatus {
055        /**
056         * None of the participant(s) have finalized their acceptance of the appointment request, and the start/end time may not be set yet.
057         */
058        PROPOSED, 
059        /**
060         * Some or all of the participant(s) have not finalized their acceptance of the appointment request.
061         */
062        PENDING, 
063        /**
064         * All participant(s) have been considered and the appointment is confirmed to go ahead at the date/times specified.
065         */
066        BOOKED, 
067        /**
068         * Some of the patients have arrived.
069         */
070        ARRIVED, 
071        /**
072         * This appointment has completed and may have resulted in an encounter.
073         */
074        FULFILLED, 
075        /**
076         * The appointment has been cancelled.
077         */
078        CANCELLED, 
079        /**
080         * Some or all of the participant(s) have not/did not appear for the appointment (usually the patient).
081         */
082        NOSHOW, 
083        /**
084         * This instance should not have been part of this patient's medical record.
085         */
086        ENTEREDINERROR, 
087        /**
088         * added to help the parsers with the generic types
089         */
090        NULL;
091        public static AppointmentStatus fromCode(String codeString) throws FHIRException {
092            if (codeString == null || "".equals(codeString))
093                return null;
094        if ("proposed".equals(codeString))
095          return PROPOSED;
096        if ("pending".equals(codeString))
097          return PENDING;
098        if ("booked".equals(codeString))
099          return BOOKED;
100        if ("arrived".equals(codeString))
101          return ARRIVED;
102        if ("fulfilled".equals(codeString))
103          return FULFILLED;
104        if ("cancelled".equals(codeString))
105          return CANCELLED;
106        if ("noshow".equals(codeString))
107          return NOSHOW;
108        if ("entered-in-error".equals(codeString))
109          return ENTEREDINERROR;
110        if (Configuration.isAcceptInvalidEnums())
111          return null;
112        else
113          throw new FHIRException("Unknown AppointmentStatus code '"+codeString+"'");
114        }
115        public String toCode() {
116          switch (this) {
117            case PROPOSED: return "proposed";
118            case PENDING: return "pending";
119            case BOOKED: return "booked";
120            case ARRIVED: return "arrived";
121            case FULFILLED: return "fulfilled";
122            case CANCELLED: return "cancelled";
123            case NOSHOW: return "noshow";
124            case ENTEREDINERROR: return "entered-in-error";
125            case NULL: return null;
126            default: return "?";
127          }
128        }
129        public String getSystem() {
130          switch (this) {
131            case PROPOSED: return "http://hl7.org/fhir/appointmentstatus";
132            case PENDING: return "http://hl7.org/fhir/appointmentstatus";
133            case BOOKED: return "http://hl7.org/fhir/appointmentstatus";
134            case ARRIVED: return "http://hl7.org/fhir/appointmentstatus";
135            case FULFILLED: return "http://hl7.org/fhir/appointmentstatus";
136            case CANCELLED: return "http://hl7.org/fhir/appointmentstatus";
137            case NOSHOW: return "http://hl7.org/fhir/appointmentstatus";
138            case ENTEREDINERROR: return "http://hl7.org/fhir/appointmentstatus";
139            case NULL: return null;
140            default: return "?";
141          }
142        }
143        public String getDefinition() {
144          switch (this) {
145            case PROPOSED: return "None of the participant(s) have finalized their acceptance of the appointment request, and the start/end time may not be set yet.";
146            case PENDING: return "Some or all of the participant(s) have not finalized their acceptance of the appointment request.";
147            case BOOKED: return "All participant(s) have been considered and the appointment is confirmed to go ahead at the date/times specified.";
148            case ARRIVED: return "Some of the patients have arrived.";
149            case FULFILLED: return "This appointment has completed and may have resulted in an encounter.";
150            case CANCELLED: return "The appointment has been cancelled.";
151            case NOSHOW: return "Some or all of the participant(s) have not/did not appear for the appointment (usually the patient).";
152            case ENTEREDINERROR: return "This instance should not have been part of this patient's medical record.";
153            case NULL: return null;
154            default: return "?";
155          }
156        }
157        public String getDisplay() {
158          switch (this) {
159            case PROPOSED: return "Proposed";
160            case PENDING: return "Pending";
161            case BOOKED: return "Booked";
162            case ARRIVED: return "Arrived";
163            case FULFILLED: return "Fulfilled";
164            case CANCELLED: return "Cancelled";
165            case NOSHOW: return "No Show";
166            case ENTEREDINERROR: return "Entered in error";
167            case NULL: return null;
168            default: return "?";
169          }
170        }
171    }
172
173  public static class AppointmentStatusEnumFactory implements EnumFactory<AppointmentStatus> {
174    public AppointmentStatus fromCode(String codeString) throws IllegalArgumentException {
175      if (codeString == null || "".equals(codeString))
176            if (codeString == null || "".equals(codeString))
177                return null;
178        if ("proposed".equals(codeString))
179          return AppointmentStatus.PROPOSED;
180        if ("pending".equals(codeString))
181          return AppointmentStatus.PENDING;
182        if ("booked".equals(codeString))
183          return AppointmentStatus.BOOKED;
184        if ("arrived".equals(codeString))
185          return AppointmentStatus.ARRIVED;
186        if ("fulfilled".equals(codeString))
187          return AppointmentStatus.FULFILLED;
188        if ("cancelled".equals(codeString))
189          return AppointmentStatus.CANCELLED;
190        if ("noshow".equals(codeString))
191          return AppointmentStatus.NOSHOW;
192        if ("entered-in-error".equals(codeString))
193          return AppointmentStatus.ENTEREDINERROR;
194        throw new IllegalArgumentException("Unknown AppointmentStatus code '"+codeString+"'");
195        }
196        public Enumeration<AppointmentStatus> fromType(Base code) throws FHIRException {
197          if (code == null)
198            return null;
199          if (code.isEmpty())
200            return new Enumeration<AppointmentStatus>(this);
201          String codeString = ((PrimitiveType) code).asStringValue();
202          if (codeString == null || "".equals(codeString))
203            return null;
204        if ("proposed".equals(codeString))
205          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.PROPOSED);
206        if ("pending".equals(codeString))
207          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.PENDING);
208        if ("booked".equals(codeString))
209          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.BOOKED);
210        if ("arrived".equals(codeString))
211          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.ARRIVED);
212        if ("fulfilled".equals(codeString))
213          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.FULFILLED);
214        if ("cancelled".equals(codeString))
215          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.CANCELLED);
216        if ("noshow".equals(codeString))
217          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.NOSHOW);
218        if ("entered-in-error".equals(codeString))
219          return new Enumeration<AppointmentStatus>(this, AppointmentStatus.ENTEREDINERROR);
220        throw new FHIRException("Unknown AppointmentStatus code '"+codeString+"'");
221        }
222    public String toCode(AppointmentStatus code) {
223      if (code == AppointmentStatus.PROPOSED)
224        return "proposed";
225      if (code == AppointmentStatus.PENDING)
226        return "pending";
227      if (code == AppointmentStatus.BOOKED)
228        return "booked";
229      if (code == AppointmentStatus.ARRIVED)
230        return "arrived";
231      if (code == AppointmentStatus.FULFILLED)
232        return "fulfilled";
233      if (code == AppointmentStatus.CANCELLED)
234        return "cancelled";
235      if (code == AppointmentStatus.NOSHOW)
236        return "noshow";
237      if (code == AppointmentStatus.ENTEREDINERROR)
238        return "entered-in-error";
239      return "?";
240      }
241    public String toSystem(AppointmentStatus code) {
242      return code.getSystem();
243      }
244    }
245
246    public enum ParticipantRequired {
247        /**
248         * The participant is required to attend the appointment.
249         */
250        REQUIRED, 
251        /**
252         * The participant may optionally attend the appointment.
253         */
254        OPTIONAL, 
255        /**
256         * The participant is excluded from the appointment, and may not be informed of the appointment taking place. (Appointment is about them, not for them - such as 2 doctors discussing results about a patient's test).
257         */
258        INFORMATIONONLY, 
259        /**
260         * added to help the parsers with the generic types
261         */
262        NULL;
263        public static ParticipantRequired fromCode(String codeString) throws FHIRException {
264            if (codeString == null || "".equals(codeString))
265                return null;
266        if ("required".equals(codeString))
267          return REQUIRED;
268        if ("optional".equals(codeString))
269          return OPTIONAL;
270        if ("information-only".equals(codeString))
271          return INFORMATIONONLY;
272        if (Configuration.isAcceptInvalidEnums())
273          return null;
274        else
275          throw new FHIRException("Unknown ParticipantRequired code '"+codeString+"'");
276        }
277        public String toCode() {
278          switch (this) {
279            case REQUIRED: return "required";
280            case OPTIONAL: return "optional";
281            case INFORMATIONONLY: return "information-only";
282            case NULL: return null;
283            default: return "?";
284          }
285        }
286        public String getSystem() {
287          switch (this) {
288            case REQUIRED: return "http://hl7.org/fhir/participantrequired";
289            case OPTIONAL: return "http://hl7.org/fhir/participantrequired";
290            case INFORMATIONONLY: return "http://hl7.org/fhir/participantrequired";
291            case NULL: return null;
292            default: return "?";
293          }
294        }
295        public String getDefinition() {
296          switch (this) {
297            case REQUIRED: return "The participant is required to attend the appointment.";
298            case OPTIONAL: return "The participant may optionally attend the appointment.";
299            case INFORMATIONONLY: return "The participant is excluded from the appointment, and may not be informed of the appointment taking place. (Appointment is about them, not for them - such as 2 doctors discussing results about a patient's test).";
300            case NULL: return null;
301            default: return "?";
302          }
303        }
304        public String getDisplay() {
305          switch (this) {
306            case REQUIRED: return "Required";
307            case OPTIONAL: return "Optional";
308            case INFORMATIONONLY: return "Information Only";
309            case NULL: return null;
310            default: return "?";
311          }
312        }
313    }
314
315  public static class ParticipantRequiredEnumFactory implements EnumFactory<ParticipantRequired> {
316    public ParticipantRequired fromCode(String codeString) throws IllegalArgumentException {
317      if (codeString == null || "".equals(codeString))
318            if (codeString == null || "".equals(codeString))
319                return null;
320        if ("required".equals(codeString))
321          return ParticipantRequired.REQUIRED;
322        if ("optional".equals(codeString))
323          return ParticipantRequired.OPTIONAL;
324        if ("information-only".equals(codeString))
325          return ParticipantRequired.INFORMATIONONLY;
326        throw new IllegalArgumentException("Unknown ParticipantRequired code '"+codeString+"'");
327        }
328        public Enumeration<ParticipantRequired> fromType(Base code) throws FHIRException {
329          if (code == null)
330            return null;
331          if (code.isEmpty())
332            return new Enumeration<ParticipantRequired>(this);
333          String codeString = ((PrimitiveType) code).asStringValue();
334          if (codeString == null || "".equals(codeString))
335            return null;
336        if ("required".equals(codeString))
337          return new Enumeration<ParticipantRequired>(this, ParticipantRequired.REQUIRED);
338        if ("optional".equals(codeString))
339          return new Enumeration<ParticipantRequired>(this, ParticipantRequired.OPTIONAL);
340        if ("information-only".equals(codeString))
341          return new Enumeration<ParticipantRequired>(this, ParticipantRequired.INFORMATIONONLY);
342        throw new FHIRException("Unknown ParticipantRequired code '"+codeString+"'");
343        }
344    public String toCode(ParticipantRequired code) {
345      if (code == ParticipantRequired.REQUIRED)
346        return "required";
347      if (code == ParticipantRequired.OPTIONAL)
348        return "optional";
349      if (code == ParticipantRequired.INFORMATIONONLY)
350        return "information-only";
351      return "?";
352      }
353    public String toSystem(ParticipantRequired code) {
354      return code.getSystem();
355      }
356    }
357
358    public enum ParticipationStatus {
359        /**
360         * The participant has accepted the appointment.
361         */
362        ACCEPTED, 
363        /**
364         * The participant has declined the appointment and will not participate in the appointment.
365         */
366        DECLINED, 
367        /**
368         * 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.
369         */
370        TENTATIVE, 
371        /**
372         * The participant needs to indicate if they accept the appointment by changing this status to one of the other statuses.
373         */
374        NEEDSACTION, 
375        /**
376         * added to help the parsers with the generic types
377         */
378        NULL;
379        public static ParticipationStatus fromCode(String codeString) throws FHIRException {
380            if (codeString == null || "".equals(codeString))
381                return null;
382        if ("accepted".equals(codeString))
383          return ACCEPTED;
384        if ("declined".equals(codeString))
385          return DECLINED;
386        if ("tentative".equals(codeString))
387          return TENTATIVE;
388        if ("needs-action".equals(codeString))
389          return NEEDSACTION;
390        if (Configuration.isAcceptInvalidEnums())
391          return null;
392        else
393          throw new FHIRException("Unknown ParticipationStatus code '"+codeString+"'");
394        }
395        public String toCode() {
396          switch (this) {
397            case ACCEPTED: return "accepted";
398            case DECLINED: return "declined";
399            case TENTATIVE: return "tentative";
400            case NEEDSACTION: return "needs-action";
401            case NULL: return null;
402            default: return "?";
403          }
404        }
405        public String getSystem() {
406          switch (this) {
407            case ACCEPTED: return "http://hl7.org/fhir/participationstatus";
408            case DECLINED: return "http://hl7.org/fhir/participationstatus";
409            case TENTATIVE: return "http://hl7.org/fhir/participationstatus";
410            case NEEDSACTION: return "http://hl7.org/fhir/participationstatus";
411            case NULL: return null;
412            default: return "?";
413          }
414        }
415        public String getDefinition() {
416          switch (this) {
417            case ACCEPTED: return "The participant has accepted the appointment.";
418            case DECLINED: return "The participant has declined the appointment and will not participate in the appointment.";
419            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.";
420            case NEEDSACTION: return "The participant needs to indicate if they accept the appointment by changing this status to one of the other statuses.";
421            case NULL: return null;
422            default: return "?";
423          }
424        }
425        public String getDisplay() {
426          switch (this) {
427            case ACCEPTED: return "Accepted";
428            case DECLINED: return "Declined";
429            case TENTATIVE: return "Tentative";
430            case NEEDSACTION: return "Needs Action";
431            case NULL: return null;
432            default: return "?";
433          }
434        }
435    }
436
437  public static class ParticipationStatusEnumFactory implements EnumFactory<ParticipationStatus> {
438    public ParticipationStatus fromCode(String codeString) throws IllegalArgumentException {
439      if (codeString == null || "".equals(codeString))
440            if (codeString == null || "".equals(codeString))
441                return null;
442        if ("accepted".equals(codeString))
443          return ParticipationStatus.ACCEPTED;
444        if ("declined".equals(codeString))
445          return ParticipationStatus.DECLINED;
446        if ("tentative".equals(codeString))
447          return ParticipationStatus.TENTATIVE;
448        if ("needs-action".equals(codeString))
449          return ParticipationStatus.NEEDSACTION;
450        throw new IllegalArgumentException("Unknown ParticipationStatus code '"+codeString+"'");
451        }
452        public Enumeration<ParticipationStatus> fromType(Base code) throws FHIRException {
453          if (code == null)
454            return null;
455          if (code.isEmpty())
456            return new Enumeration<ParticipationStatus>(this);
457          String codeString = ((PrimitiveType) code).asStringValue();
458          if (codeString == null || "".equals(codeString))
459            return null;
460        if ("accepted".equals(codeString))
461          return new Enumeration<ParticipationStatus>(this, ParticipationStatus.ACCEPTED);
462        if ("declined".equals(codeString))
463          return new Enumeration<ParticipationStatus>(this, ParticipationStatus.DECLINED);
464        if ("tentative".equals(codeString))
465          return new Enumeration<ParticipationStatus>(this, ParticipationStatus.TENTATIVE);
466        if ("needs-action".equals(codeString))
467          return new Enumeration<ParticipationStatus>(this, ParticipationStatus.NEEDSACTION);
468        throw new FHIRException("Unknown ParticipationStatus code '"+codeString+"'");
469        }
470    public String toCode(ParticipationStatus code) {
471      if (code == ParticipationStatus.ACCEPTED)
472        return "accepted";
473      if (code == ParticipationStatus.DECLINED)
474        return "declined";
475      if (code == ParticipationStatus.TENTATIVE)
476        return "tentative";
477      if (code == ParticipationStatus.NEEDSACTION)
478        return "needs-action";
479      return "?";
480      }
481    public String toSystem(ParticipationStatus code) {
482      return code.getSystem();
483      }
484    }
485
486    @Block()
487    public static class AppointmentParticipantComponent extends BackboneElement implements IBaseBackboneElement {
488        /**
489         * Role of participant in the appointment.
490         */
491        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
492        @Description(shortDefinition="Role of participant in the appointment", formalDefinition="Role of participant in the appointment." )
493        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/encounter-participant-type")
494        protected List<CodeableConcept> type;
495
496        /**
497         * A Person, Location/HealthcareService or Device that is participating in the appointment.
498         */
499        @Child(name = "actor", type = {Patient.class, Practitioner.class, RelatedPerson.class, Device.class, HealthcareService.class, Location.class}, order=2, min=0, max=1, modifier=false, summary=true)
500        @Description(shortDefinition="Person, Location/HealthcareService or Device", formalDefinition="A Person, Location/HealthcareService or Device that is participating in the appointment." )
501        protected Reference actor;
502
503        /**
504         * The actual object that is the target of the reference (A Person, Location/HealthcareService or Device that is participating in the appointment.)
505         */
506        protected Resource actorTarget;
507
508        /**
509         * Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.
510         */
511        @Child(name = "required", type = {CodeType.class}, order=3, min=0, max=1, modifier=false, summary=true)
512        @Description(shortDefinition="required | optional | information-only", formalDefinition="Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present." )
513        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/participantrequired")
514        protected Enumeration<ParticipantRequired> required;
515
516        /**
517         * Participation status of the actor.
518         */
519        @Child(name = "status", type = {CodeType.class}, order=4, min=1, max=1, modifier=false, summary=false)
520        @Description(shortDefinition="accepted | declined | tentative | needs-action", formalDefinition="Participation status of the actor." )
521        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/participationstatus")
522        protected Enumeration<ParticipationStatus> status;
523
524        private static final long serialVersionUID = -1620552507L;
525
526    /**
527     * Constructor
528     */
529      public AppointmentParticipantComponent() {
530        super();
531      }
532
533    /**
534     * Constructor
535     */
536      public AppointmentParticipantComponent(Enumeration<ParticipationStatus> status) {
537        super();
538        this.status = status;
539      }
540
541        /**
542         * @return {@link #type} (Role of participant in the appointment.)
543         */
544        public List<CodeableConcept> getType() { 
545          if (this.type == null)
546            this.type = new ArrayList<CodeableConcept>();
547          return this.type;
548        }
549
550        /**
551         * @return Returns a reference to <code>this</code> for easy method chaining
552         */
553        public AppointmentParticipantComponent setType(List<CodeableConcept> theType) { 
554          this.type = theType;
555          return this;
556        }
557
558        public boolean hasType() { 
559          if (this.type == null)
560            return false;
561          for (CodeableConcept item : this.type)
562            if (!item.isEmpty())
563              return true;
564          return false;
565        }
566
567        public CodeableConcept addType() { //3
568          CodeableConcept t = new CodeableConcept();
569          if (this.type == null)
570            this.type = new ArrayList<CodeableConcept>();
571          this.type.add(t);
572          return t;
573        }
574
575        public AppointmentParticipantComponent addType(CodeableConcept t) { //3
576          if (t == null)
577            return this;
578          if (this.type == null)
579            this.type = new ArrayList<CodeableConcept>();
580          this.type.add(t);
581          return this;
582        }
583
584        /**
585         * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist
586         */
587        public CodeableConcept getTypeFirstRep() { 
588          if (getType().isEmpty()) {
589            addType();
590          }
591          return getType().get(0);
592        }
593
594        /**
595         * @return {@link #actor} (A Person, Location/HealthcareService or Device that is participating in the appointment.)
596         */
597        public Reference getActor() { 
598          if (this.actor == null)
599            if (Configuration.errorOnAutoCreate())
600              throw new Error("Attempt to auto-create AppointmentParticipantComponent.actor");
601            else if (Configuration.doAutoCreate())
602              this.actor = new Reference(); // cc
603          return this.actor;
604        }
605
606        public boolean hasActor() { 
607          return this.actor != null && !this.actor.isEmpty();
608        }
609
610        /**
611         * @param value {@link #actor} (A Person, Location/HealthcareService or Device that is participating in the appointment.)
612         */
613        public AppointmentParticipantComponent setActor(Reference value)  { 
614          this.actor = value;
615          return this;
616        }
617
618        /**
619         * @return {@link #actor} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (A Person, Location/HealthcareService or Device that is participating in the appointment.)
620         */
621        public Resource getActorTarget() { 
622          return this.actorTarget;
623        }
624
625        /**
626         * @param value {@link #actor} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (A Person, Location/HealthcareService or Device that is participating in the appointment.)
627         */
628        public AppointmentParticipantComponent setActorTarget(Resource value) { 
629          this.actorTarget = value;
630          return this;
631        }
632
633        /**
634         * @return {@link #required} (Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.). This is the underlying object with id, value and extensions. The accessor "getRequired" gives direct access to the value
635         */
636        public Enumeration<ParticipantRequired> getRequiredElement() { 
637          if (this.required == null)
638            if (Configuration.errorOnAutoCreate())
639              throw new Error("Attempt to auto-create AppointmentParticipantComponent.required");
640            else if (Configuration.doAutoCreate())
641              this.required = new Enumeration<ParticipantRequired>(new ParticipantRequiredEnumFactory()); // bb
642          return this.required;
643        }
644
645        public boolean hasRequiredElement() { 
646          return this.required != null && !this.required.isEmpty();
647        }
648
649        public boolean hasRequired() { 
650          return this.required != null && !this.required.isEmpty();
651        }
652
653        /**
654         * @param value {@link #required} (Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.). This is the underlying object with id, value and extensions. The accessor "getRequired" gives direct access to the value
655         */
656        public AppointmentParticipantComponent setRequiredElement(Enumeration<ParticipantRequired> value) { 
657          this.required = value;
658          return this;
659        }
660
661        /**
662         * @return Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.
663         */
664        public ParticipantRequired getRequired() { 
665          return this.required == null ? null : this.required.getValue();
666        }
667
668        /**
669         * @param value Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.
670         */
671        public AppointmentParticipantComponent setRequired(ParticipantRequired value) { 
672          if (value == null)
673            this.required = null;
674          else {
675            if (this.required == null)
676              this.required = new Enumeration<ParticipantRequired>(new ParticipantRequiredEnumFactory());
677            this.required.setValue(value);
678          }
679          return this;
680        }
681
682        /**
683         * @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
684         */
685        public Enumeration<ParticipationStatus> getStatusElement() { 
686          if (this.status == null)
687            if (Configuration.errorOnAutoCreate())
688              throw new Error("Attempt to auto-create AppointmentParticipantComponent.status");
689            else if (Configuration.doAutoCreate())
690              this.status = new Enumeration<ParticipationStatus>(new ParticipationStatusEnumFactory()); // bb
691          return this.status;
692        }
693
694        public boolean hasStatusElement() { 
695          return this.status != null && !this.status.isEmpty();
696        }
697
698        public boolean hasStatus() { 
699          return this.status != null && !this.status.isEmpty();
700        }
701
702        /**
703         * @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
704         */
705        public AppointmentParticipantComponent setStatusElement(Enumeration<ParticipationStatus> value) { 
706          this.status = value;
707          return this;
708        }
709
710        /**
711         * @return Participation status of the actor.
712         */
713        public ParticipationStatus getStatus() { 
714          return this.status == null ? null : this.status.getValue();
715        }
716
717        /**
718         * @param value Participation status of the actor.
719         */
720        public AppointmentParticipantComponent setStatus(ParticipationStatus value) { 
721            if (this.status == null)
722              this.status = new Enumeration<ParticipationStatus>(new ParticipationStatusEnumFactory());
723            this.status.setValue(value);
724          return this;
725        }
726
727        protected void listChildren(List<Property> children) {
728          super.listChildren(children);
729          children.add(new Property("type", "CodeableConcept", "Role of participant in the appointment.", 0, java.lang.Integer.MAX_VALUE, type));
730          children.add(new Property("actor", "Reference(Patient|Practitioner|RelatedPerson|Device|HealthcareService|Location)", "A Person, Location/HealthcareService or Device that is participating in the appointment.", 0, 1, actor));
731          children.add(new Property("required", "code", "Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.", 0, 1, required));
732          children.add(new Property("status", "code", "Participation status of the actor.", 0, 1, status));
733        }
734
735        @Override
736        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
737          switch (_hash) {
738          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Role of participant in the appointment.", 0, java.lang.Integer.MAX_VALUE, type);
739          case 92645877: /*actor*/  return new Property("actor", "Reference(Patient|Practitioner|RelatedPerson|Device|HealthcareService|Location)", "A Person, Location/HealthcareService or Device that is participating in the appointment.", 0, 1, actor);
740          case -393139297: /*required*/  return new Property("required", "code", "Is this participant required to be present at the meeting. This covers a use-case where 2 doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.", 0, 1, required);
741          case -892481550: /*status*/  return new Property("status", "code", "Participation status of the actor.", 0, 1, status);
742          default: return super.getNamedProperty(_hash, _name, _checkValid);
743          }
744
745        }
746
747      @Override
748      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
749        switch (hash) {
750        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
751        case 92645877: /*actor*/ return this.actor == null ? new Base[0] : new Base[] {this.actor}; // Reference
752        case -393139297: /*required*/ return this.required == null ? new Base[0] : new Base[] {this.required}; // Enumeration<ParticipantRequired>
753        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ParticipationStatus>
754        default: return super.getProperty(hash, name, checkValid);
755        }
756
757      }
758
759      @Override
760      public Base setProperty(int hash, String name, Base value) throws FHIRException {
761        switch (hash) {
762        case 3575610: // type
763          this.getType().add(castToCodeableConcept(value)); // CodeableConcept
764          return value;
765        case 92645877: // actor
766          this.actor = castToReference(value); // Reference
767          return value;
768        case -393139297: // required
769          value = new ParticipantRequiredEnumFactory().fromType(castToCode(value));
770          this.required = (Enumeration) value; // Enumeration<ParticipantRequired>
771          return value;
772        case -892481550: // status
773          value = new ParticipationStatusEnumFactory().fromType(castToCode(value));
774          this.status = (Enumeration) value; // Enumeration<ParticipationStatus>
775          return value;
776        default: return super.setProperty(hash, name, value);
777        }
778
779      }
780
781      @Override
782      public Base setProperty(String name, Base value) throws FHIRException {
783        if (name.equals("type")) {
784          this.getType().add(castToCodeableConcept(value));
785        } else if (name.equals("actor")) {
786          this.actor = castToReference(value); // Reference
787        } else if (name.equals("required")) {
788          value = new ParticipantRequiredEnumFactory().fromType(castToCode(value));
789          this.required = (Enumeration) value; // Enumeration<ParticipantRequired>
790        } else if (name.equals("status")) {
791          value = new ParticipationStatusEnumFactory().fromType(castToCode(value));
792          this.status = (Enumeration) value; // Enumeration<ParticipationStatus>
793        } else
794          return super.setProperty(name, value);
795        return value;
796      }
797
798      @Override
799      public Base makeProperty(int hash, String name) throws FHIRException {
800        switch (hash) {
801        case 3575610:  return addType(); 
802        case 92645877:  return getActor(); 
803        case -393139297:  return getRequiredElement();
804        case -892481550:  return getStatusElement();
805        default: return super.makeProperty(hash, name);
806        }
807
808      }
809
810      @Override
811      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
812        switch (hash) {
813        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
814        case 92645877: /*actor*/ return new String[] {"Reference"};
815        case -393139297: /*required*/ return new String[] {"code"};
816        case -892481550: /*status*/ return new String[] {"code"};
817        default: return super.getTypesForProperty(hash, name);
818        }
819
820      }
821
822      @Override
823      public Base addChild(String name) throws FHIRException {
824        if (name.equals("type")) {
825          return addType();
826        }
827        else if (name.equals("actor")) {
828          this.actor = new Reference();
829          return this.actor;
830        }
831        else if (name.equals("required")) {
832          throw new FHIRException("Cannot call addChild on a primitive type Appointment.required");
833        }
834        else if (name.equals("status")) {
835          throw new FHIRException("Cannot call addChild on a primitive type Appointment.status");
836        }
837        else
838          return super.addChild(name);
839      }
840
841      public AppointmentParticipantComponent copy() {
842        AppointmentParticipantComponent dst = new AppointmentParticipantComponent();
843        copyValues(dst);
844        if (type != null) {
845          dst.type = new ArrayList<CodeableConcept>();
846          for (CodeableConcept i : type)
847            dst.type.add(i.copy());
848        };
849        dst.actor = actor == null ? null : actor.copy();
850        dst.required = required == null ? null : required.copy();
851        dst.status = status == null ? null : status.copy();
852        return dst;
853      }
854
855      @Override
856      public boolean equalsDeep(Base other_) {
857        if (!super.equalsDeep(other_))
858          return false;
859        if (!(other_ instanceof AppointmentParticipantComponent))
860          return false;
861        AppointmentParticipantComponent o = (AppointmentParticipantComponent) other_;
862        return compareDeep(type, o.type, true) && compareDeep(actor, o.actor, true) && compareDeep(required, o.required, true)
863           && compareDeep(status, o.status, true);
864      }
865
866      @Override
867      public boolean equalsShallow(Base other_) {
868        if (!super.equalsShallow(other_))
869          return false;
870        if (!(other_ instanceof AppointmentParticipantComponent))
871          return false;
872        AppointmentParticipantComponent o = (AppointmentParticipantComponent) other_;
873        return compareValues(required, o.required, true) && compareValues(status, o.status, true);
874      }
875
876      public boolean isEmpty() {
877        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, actor, required, status
878          );
879      }
880
881  public String fhirType() {
882    return "Appointment.participant";
883
884  }
885
886  }
887
888    /**
889     * 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).
890     */
891    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
892    @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)." )
893    protected List<Identifier> identifier;
894
895    /**
896     * 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.
897     */
898    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
899    @Description(shortDefinition="proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error", 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." )
900    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/appointmentstatus")
901    protected Enumeration<AppointmentStatus> status;
902
903    /**
904     * A broad categorisation of the service that is to be performed during this appointment.
905     */
906    @Child(name = "serviceCategory", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
907    @Description(shortDefinition="A broad categorisation of the service that is to be performed during this appointment", formalDefinition="A broad categorisation of the service that is to be performed during this appointment." )
908    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-category")
909    protected CodeableConcept serviceCategory;
910
911    /**
912     * The specific service that is to be performed during this appointment.
913     */
914    @Child(name = "serviceType", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
915    @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." )
916    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-type")
917    protected List<CodeableConcept> serviceType;
918
919    /**
920     * The specialty of a practitioner that would be required to perform the service requested in this appointment.
921     */
922    @Child(name = "specialty", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
923    @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." )
924    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/c80-practice-codes")
925    protected List<CodeableConcept> specialty;
926
927    /**
928     * The style of appointment or patient that has been booked in the slot (not service type).
929     */
930    @Child(name = "appointmentType", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=true)
931    @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)." )
932    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/v2-0276")
933    protected CodeableConcept appointmentType;
934
935    /**
936     * The reason that this appointment is being scheduled. This is more clinical than administrative.
937     */
938    @Child(name = "reason", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
939    @Description(shortDefinition="Reason this appointment is scheduled", formalDefinition="The reason that this appointment is being scheduled. This is more clinical than administrative." )
940    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/encounter-reason")
941    protected List<CodeableConcept> reason;
942
943    /**
944     * Reason the appointment has been scheduled to take place, 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.
945     */
946    @Child(name = "indication", type = {Condition.class, Procedure.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
947    @Description(shortDefinition="Reason the appointment is to takes place (resource)", formalDefinition="Reason the appointment has been scheduled to take place, 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." )
948    protected List<Reference> indication;
949    /**
950     * The actual objects that are the target of the reference (Reason the appointment has been scheduled to take place, 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.)
951     */
952    protected List<Resource> indicationTarget;
953
954
955    /**
956     * 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).
957     */
958    @Child(name = "priority", type = {UnsignedIntType.class}, order=8, min=0, max=1, modifier=false, summary=false)
959    @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)." )
960    protected UnsignedIntType priority;
961
962    /**
963     * 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 comment field.
964     */
965    @Child(name = "description", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=false)
966    @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 comment field." )
967    protected StringType description;
968
969    /**
970     * Additional information to support the appointment provided when making the appointment.
971     */
972    @Child(name = "supportingInformation", type = {Reference.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
973    @Description(shortDefinition="Additional information to support the appointment", formalDefinition="Additional information to support the appointment provided when making the appointment." )
974    protected List<Reference> supportingInformation;
975    /**
976     * The actual objects that are the target of the reference (Additional information to support the appointment provided when making the appointment.)
977     */
978    protected List<Resource> supportingInformationTarget;
979
980
981    /**
982     * Date/Time that the appointment is to take place.
983     */
984    @Child(name = "start", type = {InstantType.class}, order=11, min=0, max=1, modifier=false, summary=true)
985    @Description(shortDefinition="When appointment is to take place", formalDefinition="Date/Time that the appointment is to take place." )
986    protected InstantType start;
987
988    /**
989     * Date/Time that the appointment is to conclude.
990     */
991    @Child(name = "end", type = {InstantType.class}, order=12, min=0, max=1, modifier=false, summary=true)
992    @Description(shortDefinition="When appointment is to conclude", formalDefinition="Date/Time that the appointment is to conclude." )
993    protected InstantType end;
994
995    /**
996     * Number of minutes that the appointment is to take. This can be less than the duration between the start and end times (where actual time of appointment is only an estimate or is a planned appointment request).
997     */
998    @Child(name = "minutesDuration", type = {PositiveIntType.class}, order=13, min=0, max=1, modifier=false, summary=false)
999    @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 (where actual time of appointment is only an estimate or is a planned appointment request)." )
1000    protected PositiveIntType minutesDuration;
1001
1002    /**
1003     * The slots from the participants' schedules that will be filled by the appointment.
1004     */
1005    @Child(name = "slot", type = {Slot.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1006    @Description(shortDefinition="The slots that this appointment is filling", formalDefinition="The slots from the participants' schedules that will be filled by the appointment." )
1007    protected List<Reference> slot;
1008    /**
1009     * The actual objects that are the target of the reference (The slots from the participants' schedules that will be filled by the appointment.)
1010     */
1011    protected List<Slot> slotTarget;
1012
1013
1014    /**
1015     * 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.
1016     */
1017    @Child(name = "created", type = {DateTimeType.class}, order=15, min=0, max=1, modifier=false, summary=false)
1018    @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." )
1019    protected DateTimeType created;
1020
1021    /**
1022     * Additional comments about the appointment.
1023     */
1024    @Child(name = "comment", type = {StringType.class}, order=16, min=0, max=1, modifier=false, summary=false)
1025    @Description(shortDefinition="Additional comments", formalDefinition="Additional comments about the appointment." )
1026    protected StringType comment;
1027
1028    /**
1029     * The referral request this appointment is allocated to assess (incoming referral).
1030     */
1031    @Child(name = "incomingReferral", type = {ReferralRequest.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1032    @Description(shortDefinition="The ReferralRequest provided as information to allocate to the Encounter", formalDefinition="The referral request this appointment is allocated to assess (incoming referral)." )
1033    protected List<Reference> incomingReferral;
1034    /**
1035     * The actual objects that are the target of the reference (The referral request this appointment is allocated to assess (incoming referral).)
1036     */
1037    protected List<ReferralRequest> incomingReferralTarget;
1038
1039
1040    /**
1041     * List of participants involved in the appointment.
1042     */
1043    @Child(name = "participant", type = {}, order=18, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1044    @Description(shortDefinition="Participants involved in appointment", formalDefinition="List of participants involved in the appointment." )
1045    protected List<AppointmentParticipantComponent> participant;
1046
1047    /**
1048     * A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within. When using these values, the minutes duration should be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time.
1049     */
1050    @Child(name = "requestedPeriod", type = {Period.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1051    @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. When using these values, the minutes duration should be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time." )
1052    protected List<Period> requestedPeriod;
1053
1054    private static final long serialVersionUID = -1589372810L;
1055
1056  /**
1057   * Constructor
1058   */
1059    public Appointment() {
1060      super();
1061    }
1062
1063  /**
1064   * Constructor
1065   */
1066    public Appointment(Enumeration<AppointmentStatus> status) {
1067      super();
1068      this.status = status;
1069    }
1070
1071    /**
1072     * @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).)
1073     */
1074    public List<Identifier> getIdentifier() { 
1075      if (this.identifier == null)
1076        this.identifier = new ArrayList<Identifier>();
1077      return this.identifier;
1078    }
1079
1080    /**
1081     * @return Returns a reference to <code>this</code> for easy method chaining
1082     */
1083    public Appointment setIdentifier(List<Identifier> theIdentifier) { 
1084      this.identifier = theIdentifier;
1085      return this;
1086    }
1087
1088    public boolean hasIdentifier() { 
1089      if (this.identifier == null)
1090        return false;
1091      for (Identifier item : this.identifier)
1092        if (!item.isEmpty())
1093          return true;
1094      return false;
1095    }
1096
1097    public Identifier addIdentifier() { //3
1098      Identifier t = new Identifier();
1099      if (this.identifier == null)
1100        this.identifier = new ArrayList<Identifier>();
1101      this.identifier.add(t);
1102      return t;
1103    }
1104
1105    public Appointment addIdentifier(Identifier t) { //3
1106      if (t == null)
1107        return this;
1108      if (this.identifier == null)
1109        this.identifier = new ArrayList<Identifier>();
1110      this.identifier.add(t);
1111      return this;
1112    }
1113
1114    /**
1115     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1116     */
1117    public Identifier getIdentifierFirstRep() { 
1118      if (getIdentifier().isEmpty()) {
1119        addIdentifier();
1120      }
1121      return getIdentifier().get(0);
1122    }
1123
1124    /**
1125     * @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
1126     */
1127    public Enumeration<AppointmentStatus> getStatusElement() { 
1128      if (this.status == null)
1129        if (Configuration.errorOnAutoCreate())
1130          throw new Error("Attempt to auto-create Appointment.status");
1131        else if (Configuration.doAutoCreate())
1132          this.status = new Enumeration<AppointmentStatus>(new AppointmentStatusEnumFactory()); // bb
1133      return this.status;
1134    }
1135
1136    public boolean hasStatusElement() { 
1137      return this.status != null && !this.status.isEmpty();
1138    }
1139
1140    public boolean hasStatus() { 
1141      return this.status != null && !this.status.isEmpty();
1142    }
1143
1144    /**
1145     * @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
1146     */
1147    public Appointment setStatusElement(Enumeration<AppointmentStatus> value) { 
1148      this.status = value;
1149      return this;
1150    }
1151
1152    /**
1153     * @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.
1154     */
1155    public AppointmentStatus getStatus() { 
1156      return this.status == null ? null : this.status.getValue();
1157    }
1158
1159    /**
1160     * @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.
1161     */
1162    public Appointment setStatus(AppointmentStatus value) { 
1163        if (this.status == null)
1164          this.status = new Enumeration<AppointmentStatus>(new AppointmentStatusEnumFactory());
1165        this.status.setValue(value);
1166      return this;
1167    }
1168
1169    /**
1170     * @return {@link #serviceCategory} (A broad categorisation of the service that is to be performed during this appointment.)
1171     */
1172    public CodeableConcept getServiceCategory() { 
1173      if (this.serviceCategory == null)
1174        if (Configuration.errorOnAutoCreate())
1175          throw new Error("Attempt to auto-create Appointment.serviceCategory");
1176        else if (Configuration.doAutoCreate())
1177          this.serviceCategory = new CodeableConcept(); // cc
1178      return this.serviceCategory;
1179    }
1180
1181    public boolean hasServiceCategory() { 
1182      return this.serviceCategory != null && !this.serviceCategory.isEmpty();
1183    }
1184
1185    /**
1186     * @param value {@link #serviceCategory} (A broad categorisation of the service that is to be performed during this appointment.)
1187     */
1188    public Appointment setServiceCategory(CodeableConcept value)  { 
1189      this.serviceCategory = value;
1190      return this;
1191    }
1192
1193    /**
1194     * @return {@link #serviceType} (The specific service that is to be performed during this appointment.)
1195     */
1196    public List<CodeableConcept> getServiceType() { 
1197      if (this.serviceType == null)
1198        this.serviceType = new ArrayList<CodeableConcept>();
1199      return this.serviceType;
1200    }
1201
1202    /**
1203     * @return Returns a reference to <code>this</code> for easy method chaining
1204     */
1205    public Appointment setServiceType(List<CodeableConcept> theServiceType) { 
1206      this.serviceType = theServiceType;
1207      return this;
1208    }
1209
1210    public boolean hasServiceType() { 
1211      if (this.serviceType == null)
1212        return false;
1213      for (CodeableConcept item : this.serviceType)
1214        if (!item.isEmpty())
1215          return true;
1216      return false;
1217    }
1218
1219    public CodeableConcept addServiceType() { //3
1220      CodeableConcept t = new CodeableConcept();
1221      if (this.serviceType == null)
1222        this.serviceType = new ArrayList<CodeableConcept>();
1223      this.serviceType.add(t);
1224      return t;
1225    }
1226
1227    public Appointment addServiceType(CodeableConcept t) { //3
1228      if (t == null)
1229        return this;
1230      if (this.serviceType == null)
1231        this.serviceType = new ArrayList<CodeableConcept>();
1232      this.serviceType.add(t);
1233      return this;
1234    }
1235
1236    /**
1237     * @return The first repetition of repeating field {@link #serviceType}, creating it if it does not already exist
1238     */
1239    public CodeableConcept getServiceTypeFirstRep() { 
1240      if (getServiceType().isEmpty()) {
1241        addServiceType();
1242      }
1243      return getServiceType().get(0);
1244    }
1245
1246    /**
1247     * @return {@link #specialty} (The specialty of a practitioner that would be required to perform the service requested in this appointment.)
1248     */
1249    public List<CodeableConcept> getSpecialty() { 
1250      if (this.specialty == null)
1251        this.specialty = new ArrayList<CodeableConcept>();
1252      return this.specialty;
1253    }
1254
1255    /**
1256     * @return Returns a reference to <code>this</code> for easy method chaining
1257     */
1258    public Appointment setSpecialty(List<CodeableConcept> theSpecialty) { 
1259      this.specialty = theSpecialty;
1260      return this;
1261    }
1262
1263    public boolean hasSpecialty() { 
1264      if (this.specialty == null)
1265        return false;
1266      for (CodeableConcept item : this.specialty)
1267        if (!item.isEmpty())
1268          return true;
1269      return false;
1270    }
1271
1272    public CodeableConcept addSpecialty() { //3
1273      CodeableConcept t = new CodeableConcept();
1274      if (this.specialty == null)
1275        this.specialty = new ArrayList<CodeableConcept>();
1276      this.specialty.add(t);
1277      return t;
1278    }
1279
1280    public Appointment addSpecialty(CodeableConcept t) { //3
1281      if (t == null)
1282        return this;
1283      if (this.specialty == null)
1284        this.specialty = new ArrayList<CodeableConcept>();
1285      this.specialty.add(t);
1286      return this;
1287    }
1288
1289    /**
1290     * @return The first repetition of repeating field {@link #specialty}, creating it if it does not already exist
1291     */
1292    public CodeableConcept getSpecialtyFirstRep() { 
1293      if (getSpecialty().isEmpty()) {
1294        addSpecialty();
1295      }
1296      return getSpecialty().get(0);
1297    }
1298
1299    /**
1300     * @return {@link #appointmentType} (The style of appointment or patient that has been booked in the slot (not service type).)
1301     */
1302    public CodeableConcept getAppointmentType() { 
1303      if (this.appointmentType == null)
1304        if (Configuration.errorOnAutoCreate())
1305          throw new Error("Attempt to auto-create Appointment.appointmentType");
1306        else if (Configuration.doAutoCreate())
1307          this.appointmentType = new CodeableConcept(); // cc
1308      return this.appointmentType;
1309    }
1310
1311    public boolean hasAppointmentType() { 
1312      return this.appointmentType != null && !this.appointmentType.isEmpty();
1313    }
1314
1315    /**
1316     * @param value {@link #appointmentType} (The style of appointment or patient that has been booked in the slot (not service type).)
1317     */
1318    public Appointment setAppointmentType(CodeableConcept value)  { 
1319      this.appointmentType = value;
1320      return this;
1321    }
1322
1323    /**
1324     * @return {@link #reason} (The reason that this appointment is being scheduled. This is more clinical than administrative.)
1325     */
1326    public List<CodeableConcept> getReason() { 
1327      if (this.reason == null)
1328        this.reason = new ArrayList<CodeableConcept>();
1329      return this.reason;
1330    }
1331
1332    /**
1333     * @return Returns a reference to <code>this</code> for easy method chaining
1334     */
1335    public Appointment setReason(List<CodeableConcept> theReason) { 
1336      this.reason = theReason;
1337      return this;
1338    }
1339
1340    public boolean hasReason() { 
1341      if (this.reason == null)
1342        return false;
1343      for (CodeableConcept item : this.reason)
1344        if (!item.isEmpty())
1345          return true;
1346      return false;
1347    }
1348
1349    public CodeableConcept addReason() { //3
1350      CodeableConcept t = new CodeableConcept();
1351      if (this.reason == null)
1352        this.reason = new ArrayList<CodeableConcept>();
1353      this.reason.add(t);
1354      return t;
1355    }
1356
1357    public Appointment addReason(CodeableConcept t) { //3
1358      if (t == null)
1359        return this;
1360      if (this.reason == null)
1361        this.reason = new ArrayList<CodeableConcept>();
1362      this.reason.add(t);
1363      return this;
1364    }
1365
1366    /**
1367     * @return The first repetition of repeating field {@link #reason}, creating it if it does not already exist
1368     */
1369    public CodeableConcept getReasonFirstRep() { 
1370      if (getReason().isEmpty()) {
1371        addReason();
1372      }
1373      return getReason().get(0);
1374    }
1375
1376    /**
1377     * @return {@link #indication} (Reason the appointment has been scheduled to take place, 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.)
1378     */
1379    public List<Reference> getIndication() { 
1380      if (this.indication == null)
1381        this.indication = new ArrayList<Reference>();
1382      return this.indication;
1383    }
1384
1385    /**
1386     * @return Returns a reference to <code>this</code> for easy method chaining
1387     */
1388    public Appointment setIndication(List<Reference> theIndication) { 
1389      this.indication = theIndication;
1390      return this;
1391    }
1392
1393    public boolean hasIndication() { 
1394      if (this.indication == null)
1395        return false;
1396      for (Reference item : this.indication)
1397        if (!item.isEmpty())
1398          return true;
1399      return false;
1400    }
1401
1402    public Reference addIndication() { //3
1403      Reference t = new Reference();
1404      if (this.indication == null)
1405        this.indication = new ArrayList<Reference>();
1406      this.indication.add(t);
1407      return t;
1408    }
1409
1410    public Appointment addIndication(Reference t) { //3
1411      if (t == null)
1412        return this;
1413      if (this.indication == null)
1414        this.indication = new ArrayList<Reference>();
1415      this.indication.add(t);
1416      return this;
1417    }
1418
1419    /**
1420     * @return The first repetition of repeating field {@link #indication}, creating it if it does not already exist
1421     */
1422    public Reference getIndicationFirstRep() { 
1423      if (getIndication().isEmpty()) {
1424        addIndication();
1425      }
1426      return getIndication().get(0);
1427    }
1428
1429    /**
1430     * @deprecated Use Reference#setResource(IBaseResource) instead
1431     */
1432    @Deprecated
1433    public List<Resource> getIndicationTarget() { 
1434      if (this.indicationTarget == null)
1435        this.indicationTarget = new ArrayList<Resource>();
1436      return this.indicationTarget;
1437    }
1438
1439    /**
1440     * @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).). This is the underlying object with id, value and extensions. The accessor "getPriority" gives direct access to the value
1441     */
1442    public UnsignedIntType getPriorityElement() { 
1443      if (this.priority == null)
1444        if (Configuration.errorOnAutoCreate())
1445          throw new Error("Attempt to auto-create Appointment.priority");
1446        else if (Configuration.doAutoCreate())
1447          this.priority = new UnsignedIntType(); // bb
1448      return this.priority;
1449    }
1450
1451    public boolean hasPriorityElement() { 
1452      return this.priority != null && !this.priority.isEmpty();
1453    }
1454
1455    public boolean hasPriority() { 
1456      return this.priority != null && !this.priority.isEmpty();
1457    }
1458
1459    /**
1460     * @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).). This is the underlying object with id, value and extensions. The accessor "getPriority" gives direct access to the value
1461     */
1462    public Appointment setPriorityElement(UnsignedIntType value) { 
1463      this.priority = value;
1464      return this;
1465    }
1466
1467    /**
1468     * @return 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).
1469     */
1470    public int getPriority() { 
1471      return this.priority == null || this.priority.isEmpty() ? 0 : this.priority.getValue();
1472    }
1473
1474    /**
1475     * @param value 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).
1476     */
1477    public Appointment setPriority(int value) { 
1478        if (this.priority == null)
1479          this.priority = new UnsignedIntType();
1480        this.priority.setValue(value);
1481      return this;
1482    }
1483
1484    /**
1485     * @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 comment field.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1486     */
1487    public StringType getDescriptionElement() { 
1488      if (this.description == null)
1489        if (Configuration.errorOnAutoCreate())
1490          throw new Error("Attempt to auto-create Appointment.description");
1491        else if (Configuration.doAutoCreate())
1492          this.description = new StringType(); // bb
1493      return this.description;
1494    }
1495
1496    public boolean hasDescriptionElement() { 
1497      return this.description != null && !this.description.isEmpty();
1498    }
1499
1500    public boolean hasDescription() { 
1501      return this.description != null && !this.description.isEmpty();
1502    }
1503
1504    /**
1505     * @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 comment field.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1506     */
1507    public Appointment setDescriptionElement(StringType value) { 
1508      this.description = value;
1509      return this;
1510    }
1511
1512    /**
1513     * @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 comment field.
1514     */
1515    public String getDescription() { 
1516      return this.description == null ? null : this.description.getValue();
1517    }
1518
1519    /**
1520     * @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 comment field.
1521     */
1522    public Appointment setDescription(String value) { 
1523      if (Utilities.noString(value))
1524        this.description = null;
1525      else {
1526        if (this.description == null)
1527          this.description = new StringType();
1528        this.description.setValue(value);
1529      }
1530      return this;
1531    }
1532
1533    /**
1534     * @return {@link #supportingInformation} (Additional information to support the appointment provided when making the appointment.)
1535     */
1536    public List<Reference> getSupportingInformation() { 
1537      if (this.supportingInformation == null)
1538        this.supportingInformation = new ArrayList<Reference>();
1539      return this.supportingInformation;
1540    }
1541
1542    /**
1543     * @return Returns a reference to <code>this</code> for easy method chaining
1544     */
1545    public Appointment setSupportingInformation(List<Reference> theSupportingInformation) { 
1546      this.supportingInformation = theSupportingInformation;
1547      return this;
1548    }
1549
1550    public boolean hasSupportingInformation() { 
1551      if (this.supportingInformation == null)
1552        return false;
1553      for (Reference item : this.supportingInformation)
1554        if (!item.isEmpty())
1555          return true;
1556      return false;
1557    }
1558
1559    public Reference addSupportingInformation() { //3
1560      Reference t = new Reference();
1561      if (this.supportingInformation == null)
1562        this.supportingInformation = new ArrayList<Reference>();
1563      this.supportingInformation.add(t);
1564      return t;
1565    }
1566
1567    public Appointment addSupportingInformation(Reference t) { //3
1568      if (t == null)
1569        return this;
1570      if (this.supportingInformation == null)
1571        this.supportingInformation = new ArrayList<Reference>();
1572      this.supportingInformation.add(t);
1573      return this;
1574    }
1575
1576    /**
1577     * @return The first repetition of repeating field {@link #supportingInformation}, creating it if it does not already exist
1578     */
1579    public Reference getSupportingInformationFirstRep() { 
1580      if (getSupportingInformation().isEmpty()) {
1581        addSupportingInformation();
1582      }
1583      return getSupportingInformation().get(0);
1584    }
1585
1586    /**
1587     * @deprecated Use Reference#setResource(IBaseResource) instead
1588     */
1589    @Deprecated
1590    public List<Resource> getSupportingInformationTarget() { 
1591      if (this.supportingInformationTarget == null)
1592        this.supportingInformationTarget = new ArrayList<Resource>();
1593      return this.supportingInformationTarget;
1594    }
1595
1596    /**
1597     * @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
1598     */
1599    public InstantType getStartElement() { 
1600      if (this.start == null)
1601        if (Configuration.errorOnAutoCreate())
1602          throw new Error("Attempt to auto-create Appointment.start");
1603        else if (Configuration.doAutoCreate())
1604          this.start = new InstantType(); // bb
1605      return this.start;
1606    }
1607
1608    public boolean hasStartElement() { 
1609      return this.start != null && !this.start.isEmpty();
1610    }
1611
1612    public boolean hasStart() { 
1613      return this.start != null && !this.start.isEmpty();
1614    }
1615
1616    /**
1617     * @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
1618     */
1619    public Appointment setStartElement(InstantType value) { 
1620      this.start = value;
1621      return this;
1622    }
1623
1624    /**
1625     * @return Date/Time that the appointment is to take place.
1626     */
1627    public Date getStart() { 
1628      return this.start == null ? null : this.start.getValue();
1629    }
1630
1631    /**
1632     * @param value Date/Time that the appointment is to take place.
1633     */
1634    public Appointment setStart(Date value) { 
1635      if (value == null)
1636        this.start = null;
1637      else {
1638        if (this.start == null)
1639          this.start = new InstantType();
1640        this.start.setValue(value);
1641      }
1642      return this;
1643    }
1644
1645    /**
1646     * @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
1647     */
1648    public InstantType getEndElement() { 
1649      if (this.end == null)
1650        if (Configuration.errorOnAutoCreate())
1651          throw new Error("Attempt to auto-create Appointment.end");
1652        else if (Configuration.doAutoCreate())
1653          this.end = new InstantType(); // bb
1654      return this.end;
1655    }
1656
1657    public boolean hasEndElement() { 
1658      return this.end != null && !this.end.isEmpty();
1659    }
1660
1661    public boolean hasEnd() { 
1662      return this.end != null && !this.end.isEmpty();
1663    }
1664
1665    /**
1666     * @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
1667     */
1668    public Appointment setEndElement(InstantType value) { 
1669      this.end = value;
1670      return this;
1671    }
1672
1673    /**
1674     * @return Date/Time that the appointment is to conclude.
1675     */
1676    public Date getEnd() { 
1677      return this.end == null ? null : this.end.getValue();
1678    }
1679
1680    /**
1681     * @param value Date/Time that the appointment is to conclude.
1682     */
1683    public Appointment setEnd(Date value) { 
1684      if (value == null)
1685        this.end = null;
1686      else {
1687        if (this.end == null)
1688          this.end = new InstantType();
1689        this.end.setValue(value);
1690      }
1691      return this;
1692    }
1693
1694    /**
1695     * @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 (where actual time of appointment is only an estimate or is a planned appointment request).). This is the underlying object with id, value and extensions. The accessor "getMinutesDuration" gives direct access to the value
1696     */
1697    public PositiveIntType getMinutesDurationElement() { 
1698      if (this.minutesDuration == null)
1699        if (Configuration.errorOnAutoCreate())
1700          throw new Error("Attempt to auto-create Appointment.minutesDuration");
1701        else if (Configuration.doAutoCreate())
1702          this.minutesDuration = new PositiveIntType(); // bb
1703      return this.minutesDuration;
1704    }
1705
1706    public boolean hasMinutesDurationElement() { 
1707      return this.minutesDuration != null && !this.minutesDuration.isEmpty();
1708    }
1709
1710    public boolean hasMinutesDuration() { 
1711      return this.minutesDuration != null && !this.minutesDuration.isEmpty();
1712    }
1713
1714    /**
1715     * @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 (where actual time of appointment is only an estimate or is a planned appointment request).). This is the underlying object with id, value and extensions. The accessor "getMinutesDuration" gives direct access to the value
1716     */
1717    public Appointment setMinutesDurationElement(PositiveIntType value) { 
1718      this.minutesDuration = value;
1719      return this;
1720    }
1721
1722    /**
1723     * @return Number of minutes that the appointment is to take. This can be less than the duration between the start and end times (where actual time of appointment is only an estimate or is a planned appointment request).
1724     */
1725    public int getMinutesDuration() { 
1726      return this.minutesDuration == null || this.minutesDuration.isEmpty() ? 0 : this.minutesDuration.getValue();
1727    }
1728
1729    /**
1730     * @param value Number of minutes that the appointment is to take. This can be less than the duration between the start and end times (where actual time of appointment is only an estimate or is a planned appointment request).
1731     */
1732    public Appointment setMinutesDuration(int value) { 
1733        if (this.minutesDuration == null)
1734          this.minutesDuration = new PositiveIntType();
1735        this.minutesDuration.setValue(value);
1736      return this;
1737    }
1738
1739    /**
1740     * @return {@link #slot} (The slots from the participants' schedules that will be filled by the appointment.)
1741     */
1742    public List<Reference> getSlot() { 
1743      if (this.slot == null)
1744        this.slot = new ArrayList<Reference>();
1745      return this.slot;
1746    }
1747
1748    /**
1749     * @return Returns a reference to <code>this</code> for easy method chaining
1750     */
1751    public Appointment setSlot(List<Reference> theSlot) { 
1752      this.slot = theSlot;
1753      return this;
1754    }
1755
1756    public boolean hasSlot() { 
1757      if (this.slot == null)
1758        return false;
1759      for (Reference item : this.slot)
1760        if (!item.isEmpty())
1761          return true;
1762      return false;
1763    }
1764
1765    public Reference addSlot() { //3
1766      Reference t = new Reference();
1767      if (this.slot == null)
1768        this.slot = new ArrayList<Reference>();
1769      this.slot.add(t);
1770      return t;
1771    }
1772
1773    public Appointment addSlot(Reference t) { //3
1774      if (t == null)
1775        return this;
1776      if (this.slot == null)
1777        this.slot = new ArrayList<Reference>();
1778      this.slot.add(t);
1779      return this;
1780    }
1781
1782    /**
1783     * @return The first repetition of repeating field {@link #slot}, creating it if it does not already exist
1784     */
1785    public Reference getSlotFirstRep() { 
1786      if (getSlot().isEmpty()) {
1787        addSlot();
1788      }
1789      return getSlot().get(0);
1790    }
1791
1792    /**
1793     * @deprecated Use Reference#setResource(IBaseResource) instead
1794     */
1795    @Deprecated
1796    public List<Slot> getSlotTarget() { 
1797      if (this.slotTarget == null)
1798        this.slotTarget = new ArrayList<Slot>();
1799      return this.slotTarget;
1800    }
1801
1802    /**
1803     * @deprecated Use Reference#setResource(IBaseResource) instead
1804     */
1805    @Deprecated
1806    public Slot addSlotTarget() { 
1807      Slot r = new Slot();
1808      if (this.slotTarget == null)
1809        this.slotTarget = new ArrayList<Slot>();
1810      this.slotTarget.add(r);
1811      return r;
1812    }
1813
1814    /**
1815     * @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
1816     */
1817    public DateTimeType getCreatedElement() { 
1818      if (this.created == null)
1819        if (Configuration.errorOnAutoCreate())
1820          throw new Error("Attempt to auto-create Appointment.created");
1821        else if (Configuration.doAutoCreate())
1822          this.created = new DateTimeType(); // bb
1823      return this.created;
1824    }
1825
1826    public boolean hasCreatedElement() { 
1827      return this.created != null && !this.created.isEmpty();
1828    }
1829
1830    public boolean hasCreated() { 
1831      return this.created != null && !this.created.isEmpty();
1832    }
1833
1834    /**
1835     * @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
1836     */
1837    public Appointment setCreatedElement(DateTimeType value) { 
1838      this.created = value;
1839      return this;
1840    }
1841
1842    /**
1843     * @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.
1844     */
1845    public Date getCreated() { 
1846      return this.created == null ? null : this.created.getValue();
1847    }
1848
1849    /**
1850     * @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.
1851     */
1852    public Appointment setCreated(Date value) { 
1853      if (value == null)
1854        this.created = null;
1855      else {
1856        if (this.created == null)
1857          this.created = new DateTimeType();
1858        this.created.setValue(value);
1859      }
1860      return this;
1861    }
1862
1863    /**
1864     * @return {@link #comment} (Additional comments about the appointment.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1865     */
1866    public StringType getCommentElement() { 
1867      if (this.comment == null)
1868        if (Configuration.errorOnAutoCreate())
1869          throw new Error("Attempt to auto-create Appointment.comment");
1870        else if (Configuration.doAutoCreate())
1871          this.comment = new StringType(); // bb
1872      return this.comment;
1873    }
1874
1875    public boolean hasCommentElement() { 
1876      return this.comment != null && !this.comment.isEmpty();
1877    }
1878
1879    public boolean hasComment() { 
1880      return this.comment != null && !this.comment.isEmpty();
1881    }
1882
1883    /**
1884     * @param value {@link #comment} (Additional comments about the appointment.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1885     */
1886    public Appointment setCommentElement(StringType value) { 
1887      this.comment = value;
1888      return this;
1889    }
1890
1891    /**
1892     * @return Additional comments about the appointment.
1893     */
1894    public String getComment() { 
1895      return this.comment == null ? null : this.comment.getValue();
1896    }
1897
1898    /**
1899     * @param value Additional comments about the appointment.
1900     */
1901    public Appointment setComment(String value) { 
1902      if (Utilities.noString(value))
1903        this.comment = null;
1904      else {
1905        if (this.comment == null)
1906          this.comment = new StringType();
1907        this.comment.setValue(value);
1908      }
1909      return this;
1910    }
1911
1912    /**
1913     * @return {@link #incomingReferral} (The referral request this appointment is allocated to assess (incoming referral).)
1914     */
1915    public List<Reference> getIncomingReferral() { 
1916      if (this.incomingReferral == null)
1917        this.incomingReferral = new ArrayList<Reference>();
1918      return this.incomingReferral;
1919    }
1920
1921    /**
1922     * @return Returns a reference to <code>this</code> for easy method chaining
1923     */
1924    public Appointment setIncomingReferral(List<Reference> theIncomingReferral) { 
1925      this.incomingReferral = theIncomingReferral;
1926      return this;
1927    }
1928
1929    public boolean hasIncomingReferral() { 
1930      if (this.incomingReferral == null)
1931        return false;
1932      for (Reference item : this.incomingReferral)
1933        if (!item.isEmpty())
1934          return true;
1935      return false;
1936    }
1937
1938    public Reference addIncomingReferral() { //3
1939      Reference t = new Reference();
1940      if (this.incomingReferral == null)
1941        this.incomingReferral = new ArrayList<Reference>();
1942      this.incomingReferral.add(t);
1943      return t;
1944    }
1945
1946    public Appointment addIncomingReferral(Reference t) { //3
1947      if (t == null)
1948        return this;
1949      if (this.incomingReferral == null)
1950        this.incomingReferral = new ArrayList<Reference>();
1951      this.incomingReferral.add(t);
1952      return this;
1953    }
1954
1955    /**
1956     * @return The first repetition of repeating field {@link #incomingReferral}, creating it if it does not already exist
1957     */
1958    public Reference getIncomingReferralFirstRep() { 
1959      if (getIncomingReferral().isEmpty()) {
1960        addIncomingReferral();
1961      }
1962      return getIncomingReferral().get(0);
1963    }
1964
1965    /**
1966     * @deprecated Use Reference#setResource(IBaseResource) instead
1967     */
1968    @Deprecated
1969    public List<ReferralRequest> getIncomingReferralTarget() { 
1970      if (this.incomingReferralTarget == null)
1971        this.incomingReferralTarget = new ArrayList<ReferralRequest>();
1972      return this.incomingReferralTarget;
1973    }
1974
1975    /**
1976     * @deprecated Use Reference#setResource(IBaseResource) instead
1977     */
1978    @Deprecated
1979    public ReferralRequest addIncomingReferralTarget() { 
1980      ReferralRequest r = new ReferralRequest();
1981      if (this.incomingReferralTarget == null)
1982        this.incomingReferralTarget = new ArrayList<ReferralRequest>();
1983      this.incomingReferralTarget.add(r);
1984      return r;
1985    }
1986
1987    /**
1988     * @return {@link #participant} (List of participants involved in the appointment.)
1989     */
1990    public List<AppointmentParticipantComponent> getParticipant() { 
1991      if (this.participant == null)
1992        this.participant = new ArrayList<AppointmentParticipantComponent>();
1993      return this.participant;
1994    }
1995
1996    /**
1997     * @return Returns a reference to <code>this</code> for easy method chaining
1998     */
1999    public Appointment setParticipant(List<AppointmentParticipantComponent> theParticipant) { 
2000      this.participant = theParticipant;
2001      return this;
2002    }
2003
2004    public boolean hasParticipant() { 
2005      if (this.participant == null)
2006        return false;
2007      for (AppointmentParticipantComponent item : this.participant)
2008        if (!item.isEmpty())
2009          return true;
2010      return false;
2011    }
2012
2013    public AppointmentParticipantComponent addParticipant() { //3
2014      AppointmentParticipantComponent t = new AppointmentParticipantComponent();
2015      if (this.participant == null)
2016        this.participant = new ArrayList<AppointmentParticipantComponent>();
2017      this.participant.add(t);
2018      return t;
2019    }
2020
2021    public Appointment addParticipant(AppointmentParticipantComponent t) { //3
2022      if (t == null)
2023        return this;
2024      if (this.participant == null)
2025        this.participant = new ArrayList<AppointmentParticipantComponent>();
2026      this.participant.add(t);
2027      return this;
2028    }
2029
2030    /**
2031     * @return The first repetition of repeating field {@link #participant}, creating it if it does not already exist
2032     */
2033    public AppointmentParticipantComponent getParticipantFirstRep() { 
2034      if (getParticipant().isEmpty()) {
2035        addParticipant();
2036      }
2037      return getParticipant().get(0);
2038    }
2039
2040    /**
2041     * @return {@link #requestedPeriod} (A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within. When using these values, the minutes duration should be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time.)
2042     */
2043    public List<Period> getRequestedPeriod() { 
2044      if (this.requestedPeriod == null)
2045        this.requestedPeriod = new ArrayList<Period>();
2046      return this.requestedPeriod;
2047    }
2048
2049    /**
2050     * @return Returns a reference to <code>this</code> for easy method chaining
2051     */
2052    public Appointment setRequestedPeriod(List<Period> theRequestedPeriod) { 
2053      this.requestedPeriod = theRequestedPeriod;
2054      return this;
2055    }
2056
2057    public boolean hasRequestedPeriod() { 
2058      if (this.requestedPeriod == null)
2059        return false;
2060      for (Period item : this.requestedPeriod)
2061        if (!item.isEmpty())
2062          return true;
2063      return false;
2064    }
2065
2066    public Period addRequestedPeriod() { //3
2067      Period t = new Period();
2068      if (this.requestedPeriod == null)
2069        this.requestedPeriod = new ArrayList<Period>();
2070      this.requestedPeriod.add(t);
2071      return t;
2072    }
2073
2074    public Appointment addRequestedPeriod(Period t) { //3
2075      if (t == null)
2076        return this;
2077      if (this.requestedPeriod == null)
2078        this.requestedPeriod = new ArrayList<Period>();
2079      this.requestedPeriod.add(t);
2080      return this;
2081    }
2082
2083    /**
2084     * @return The first repetition of repeating field {@link #requestedPeriod}, creating it if it does not already exist
2085     */
2086    public Period getRequestedPeriodFirstRep() { 
2087      if (getRequestedPeriod().isEmpty()) {
2088        addRequestedPeriod();
2089      }
2090      return getRequestedPeriod().get(0);
2091    }
2092
2093      protected void listChildren(List<Property> children) {
2094        super.listChildren(children);
2095        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));
2096        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));
2097        children.add(new Property("serviceCategory", "CodeableConcept", "A broad categorisation of the service that is to be performed during this appointment.", 0, 1, serviceCategory));
2098        children.add(new Property("serviceType", "CodeableConcept", "The specific service that is to be performed during this appointment.", 0, java.lang.Integer.MAX_VALUE, serviceType));
2099        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));
2100        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));
2101        children.add(new Property("reason", "CodeableConcept", "The reason that this appointment is being scheduled. This is more clinical than administrative.", 0, java.lang.Integer.MAX_VALUE, reason));
2102        children.add(new Property("indication", "Reference(Condition|Procedure)", "Reason the appointment has been scheduled to take place, 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, indication));
2103        children.add(new Property("priority", "unsignedInt", "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));
2104        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 comment field.", 0, 1, description));
2105        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));
2106        children.add(new Property("start", "instant", "Date/Time that the appointment is to take place.", 0, 1, start));
2107        children.add(new Property("end", "instant", "Date/Time that the appointment is to conclude.", 0, 1, end));
2108        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 (where actual time of appointment is only an estimate or is a planned appointment request).", 0, 1, minutesDuration));
2109        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));
2110        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));
2111        children.add(new Property("comment", "string", "Additional comments about the appointment.", 0, 1, comment));
2112        children.add(new Property("incomingReferral", "Reference(ReferralRequest)", "The referral request this appointment is allocated to assess (incoming referral).", 0, java.lang.Integer.MAX_VALUE, incomingReferral));
2113        children.add(new Property("participant", "", "List of participants involved in the appointment.", 0, java.lang.Integer.MAX_VALUE, participant));
2114        children.add(new Property("requestedPeriod", "Period", "A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within. When using these values, the minutes duration should be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time.", 0, java.lang.Integer.MAX_VALUE, requestedPeriod));
2115      }
2116
2117      @Override
2118      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2119        switch (_hash) {
2120        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);
2121        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);
2122        case 1281188563: /*serviceCategory*/  return new Property("serviceCategory", "CodeableConcept", "A broad categorisation of the service that is to be performed during this appointment.", 0, 1, serviceCategory);
2123        case -1928370289: /*serviceType*/  return new Property("serviceType", "CodeableConcept", "The specific service that is to be performed during this appointment.", 0, java.lang.Integer.MAX_VALUE, serviceType);
2124        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);
2125        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);
2126        case -934964668: /*reason*/  return new Property("reason", "CodeableConcept", "The reason that this appointment is being scheduled. This is more clinical than administrative.", 0, java.lang.Integer.MAX_VALUE, reason);
2127        case -597168804: /*indication*/  return new Property("indication", "Reference(Condition|Procedure)", "Reason the appointment has been scheduled to take place, 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, indication);
2128        case -1165461084: /*priority*/  return new Property("priority", "unsignedInt", "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);
2129        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 comment field.", 0, 1, description);
2130        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);
2131        case 109757538: /*start*/  return new Property("start", "instant", "Date/Time that the appointment is to take place.", 0, 1, start);
2132        case 100571: /*end*/  return new Property("end", "instant", "Date/Time that the appointment is to conclude.", 0, 1, end);
2133        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 (where actual time of appointment is only an estimate or is a planned appointment request).", 0, 1, minutesDuration);
2134        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);
2135        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);
2136        case 950398559: /*comment*/  return new Property("comment", "string", "Additional comments about the appointment.", 0, 1, comment);
2137        case -1258204701: /*incomingReferral*/  return new Property("incomingReferral", "Reference(ReferralRequest)", "The referral request this appointment is allocated to assess (incoming referral).", 0, java.lang.Integer.MAX_VALUE, incomingReferral);
2138        case 767422259: /*participant*/  return new Property("participant", "", "List of participants involved in the appointment.", 0, java.lang.Integer.MAX_VALUE, participant);
2139        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. When using these values, the minutes duration should be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time.", 0, java.lang.Integer.MAX_VALUE, requestedPeriod);
2140        default: return super.getNamedProperty(_hash, _name, _checkValid);
2141        }
2142
2143      }
2144
2145      @Override
2146      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2147        switch (hash) {
2148        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2149        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<AppointmentStatus>
2150        case 1281188563: /*serviceCategory*/ return this.serviceCategory == null ? new Base[0] : new Base[] {this.serviceCategory}; // CodeableConcept
2151        case -1928370289: /*serviceType*/ return this.serviceType == null ? new Base[0] : this.serviceType.toArray(new Base[this.serviceType.size()]); // CodeableConcept
2152        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
2153        case -1596426375: /*appointmentType*/ return this.appointmentType == null ? new Base[0] : new Base[] {this.appointmentType}; // CodeableConcept
2154        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : this.reason.toArray(new Base[this.reason.size()]); // CodeableConcept
2155        case -597168804: /*indication*/ return this.indication == null ? new Base[0] : this.indication.toArray(new Base[this.indication.size()]); // Reference
2156        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // UnsignedIntType
2157        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
2158        case -1248768647: /*supportingInformation*/ return this.supportingInformation == null ? new Base[0] : this.supportingInformation.toArray(new Base[this.supportingInformation.size()]); // Reference
2159        case 109757538: /*start*/ return this.start == null ? new Base[0] : new Base[] {this.start}; // InstantType
2160        case 100571: /*end*/ return this.end == null ? new Base[0] : new Base[] {this.end}; // InstantType
2161        case -413630573: /*minutesDuration*/ return this.minutesDuration == null ? new Base[0] : new Base[] {this.minutesDuration}; // PositiveIntType
2162        case 3533310: /*slot*/ return this.slot == null ? new Base[0] : this.slot.toArray(new Base[this.slot.size()]); // Reference
2163        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateTimeType
2164        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
2165        case -1258204701: /*incomingReferral*/ return this.incomingReferral == null ? new Base[0] : this.incomingReferral.toArray(new Base[this.incomingReferral.size()]); // Reference
2166        case 767422259: /*participant*/ return this.participant == null ? new Base[0] : this.participant.toArray(new Base[this.participant.size()]); // AppointmentParticipantComponent
2167        case -897241393: /*requestedPeriod*/ return this.requestedPeriod == null ? new Base[0] : this.requestedPeriod.toArray(new Base[this.requestedPeriod.size()]); // Period
2168        default: return super.getProperty(hash, name, checkValid);
2169        }
2170
2171      }
2172
2173      @Override
2174      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2175        switch (hash) {
2176        case -1618432855: // identifier
2177          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2178          return value;
2179        case -892481550: // status
2180          value = new AppointmentStatusEnumFactory().fromType(castToCode(value));
2181          this.status = (Enumeration) value; // Enumeration<AppointmentStatus>
2182          return value;
2183        case 1281188563: // serviceCategory
2184          this.serviceCategory = castToCodeableConcept(value); // CodeableConcept
2185          return value;
2186        case -1928370289: // serviceType
2187          this.getServiceType().add(castToCodeableConcept(value)); // CodeableConcept
2188          return value;
2189        case -1694759682: // specialty
2190          this.getSpecialty().add(castToCodeableConcept(value)); // CodeableConcept
2191          return value;
2192        case -1596426375: // appointmentType
2193          this.appointmentType = castToCodeableConcept(value); // CodeableConcept
2194          return value;
2195        case -934964668: // reason
2196          this.getReason().add(castToCodeableConcept(value)); // CodeableConcept
2197          return value;
2198        case -597168804: // indication
2199          this.getIndication().add(castToReference(value)); // Reference
2200          return value;
2201        case -1165461084: // priority
2202          this.priority = castToUnsignedInt(value); // UnsignedIntType
2203          return value;
2204        case -1724546052: // description
2205          this.description = castToString(value); // StringType
2206          return value;
2207        case -1248768647: // supportingInformation
2208          this.getSupportingInformation().add(castToReference(value)); // Reference
2209          return value;
2210        case 109757538: // start
2211          this.start = castToInstant(value); // InstantType
2212          return value;
2213        case 100571: // end
2214          this.end = castToInstant(value); // InstantType
2215          return value;
2216        case -413630573: // minutesDuration
2217          this.minutesDuration = castToPositiveInt(value); // PositiveIntType
2218          return value;
2219        case 3533310: // slot
2220          this.getSlot().add(castToReference(value)); // Reference
2221          return value;
2222        case 1028554472: // created
2223          this.created = castToDateTime(value); // DateTimeType
2224          return value;
2225        case 950398559: // comment
2226          this.comment = castToString(value); // StringType
2227          return value;
2228        case -1258204701: // incomingReferral
2229          this.getIncomingReferral().add(castToReference(value)); // Reference
2230          return value;
2231        case 767422259: // participant
2232          this.getParticipant().add((AppointmentParticipantComponent) value); // AppointmentParticipantComponent
2233          return value;
2234        case -897241393: // requestedPeriod
2235          this.getRequestedPeriod().add(castToPeriod(value)); // Period
2236          return value;
2237        default: return super.setProperty(hash, name, value);
2238        }
2239
2240      }
2241
2242      @Override
2243      public Base setProperty(String name, Base value) throws FHIRException {
2244        if (name.equals("identifier")) {
2245          this.getIdentifier().add(castToIdentifier(value));
2246        } else if (name.equals("status")) {
2247          value = new AppointmentStatusEnumFactory().fromType(castToCode(value));
2248          this.status = (Enumeration) value; // Enumeration<AppointmentStatus>
2249        } else if (name.equals("serviceCategory")) {
2250          this.serviceCategory = castToCodeableConcept(value); // CodeableConcept
2251        } else if (name.equals("serviceType")) {
2252          this.getServiceType().add(castToCodeableConcept(value));
2253        } else if (name.equals("specialty")) {
2254          this.getSpecialty().add(castToCodeableConcept(value));
2255        } else if (name.equals("appointmentType")) {
2256          this.appointmentType = castToCodeableConcept(value); // CodeableConcept
2257        } else if (name.equals("reason")) {
2258          this.getReason().add(castToCodeableConcept(value));
2259        } else if (name.equals("indication")) {
2260          this.getIndication().add(castToReference(value));
2261        } else if (name.equals("priority")) {
2262          this.priority = castToUnsignedInt(value); // UnsignedIntType
2263        } else if (name.equals("description")) {
2264          this.description = castToString(value); // StringType
2265        } else if (name.equals("supportingInformation")) {
2266          this.getSupportingInformation().add(castToReference(value));
2267        } else if (name.equals("start")) {
2268          this.start = castToInstant(value); // InstantType
2269        } else if (name.equals("end")) {
2270          this.end = castToInstant(value); // InstantType
2271        } else if (name.equals("minutesDuration")) {
2272          this.minutesDuration = castToPositiveInt(value); // PositiveIntType
2273        } else if (name.equals("slot")) {
2274          this.getSlot().add(castToReference(value));
2275        } else if (name.equals("created")) {
2276          this.created = castToDateTime(value); // DateTimeType
2277        } else if (name.equals("comment")) {
2278          this.comment = castToString(value); // StringType
2279        } else if (name.equals("incomingReferral")) {
2280          this.getIncomingReferral().add(castToReference(value));
2281        } else if (name.equals("participant")) {
2282          this.getParticipant().add((AppointmentParticipantComponent) value);
2283        } else if (name.equals("requestedPeriod")) {
2284          this.getRequestedPeriod().add(castToPeriod(value));
2285        } else
2286          return super.setProperty(name, value);
2287        return value;
2288      }
2289
2290      @Override
2291      public Base makeProperty(int hash, String name) throws FHIRException {
2292        switch (hash) {
2293        case -1618432855:  return addIdentifier(); 
2294        case -892481550:  return getStatusElement();
2295        case 1281188563:  return getServiceCategory(); 
2296        case -1928370289:  return addServiceType(); 
2297        case -1694759682:  return addSpecialty(); 
2298        case -1596426375:  return getAppointmentType(); 
2299        case -934964668:  return addReason(); 
2300        case -597168804:  return addIndication(); 
2301        case -1165461084:  return getPriorityElement();
2302        case -1724546052:  return getDescriptionElement();
2303        case -1248768647:  return addSupportingInformation(); 
2304        case 109757538:  return getStartElement();
2305        case 100571:  return getEndElement();
2306        case -413630573:  return getMinutesDurationElement();
2307        case 3533310:  return addSlot(); 
2308        case 1028554472:  return getCreatedElement();
2309        case 950398559:  return getCommentElement();
2310        case -1258204701:  return addIncomingReferral(); 
2311        case 767422259:  return addParticipant(); 
2312        case -897241393:  return addRequestedPeriod(); 
2313        default: return super.makeProperty(hash, name);
2314        }
2315
2316      }
2317
2318      @Override
2319      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2320        switch (hash) {
2321        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2322        case -892481550: /*status*/ return new String[] {"code"};
2323        case 1281188563: /*serviceCategory*/ return new String[] {"CodeableConcept"};
2324        case -1928370289: /*serviceType*/ return new String[] {"CodeableConcept"};
2325        case -1694759682: /*specialty*/ return new String[] {"CodeableConcept"};
2326        case -1596426375: /*appointmentType*/ return new String[] {"CodeableConcept"};
2327        case -934964668: /*reason*/ return new String[] {"CodeableConcept"};
2328        case -597168804: /*indication*/ return new String[] {"Reference"};
2329        case -1165461084: /*priority*/ return new String[] {"unsignedInt"};
2330        case -1724546052: /*description*/ return new String[] {"string"};
2331        case -1248768647: /*supportingInformation*/ return new String[] {"Reference"};
2332        case 109757538: /*start*/ return new String[] {"instant"};
2333        case 100571: /*end*/ return new String[] {"instant"};
2334        case -413630573: /*minutesDuration*/ return new String[] {"positiveInt"};
2335        case 3533310: /*slot*/ return new String[] {"Reference"};
2336        case 1028554472: /*created*/ return new String[] {"dateTime"};
2337        case 950398559: /*comment*/ return new String[] {"string"};
2338        case -1258204701: /*incomingReferral*/ return new String[] {"Reference"};
2339        case 767422259: /*participant*/ return new String[] {};
2340        case -897241393: /*requestedPeriod*/ return new String[] {"Period"};
2341        default: return super.getTypesForProperty(hash, name);
2342        }
2343
2344      }
2345
2346      @Override
2347      public Base addChild(String name) throws FHIRException {
2348        if (name.equals("identifier")) {
2349          return addIdentifier();
2350        }
2351        else if (name.equals("status")) {
2352          throw new FHIRException("Cannot call addChild on a primitive type Appointment.status");
2353        }
2354        else if (name.equals("serviceCategory")) {
2355          this.serviceCategory = new CodeableConcept();
2356          return this.serviceCategory;
2357        }
2358        else if (name.equals("serviceType")) {
2359          return addServiceType();
2360        }
2361        else if (name.equals("specialty")) {
2362          return addSpecialty();
2363        }
2364        else if (name.equals("appointmentType")) {
2365          this.appointmentType = new CodeableConcept();
2366          return this.appointmentType;
2367        }
2368        else if (name.equals("reason")) {
2369          return addReason();
2370        }
2371        else if (name.equals("indication")) {
2372          return addIndication();
2373        }
2374        else if (name.equals("priority")) {
2375          throw new FHIRException("Cannot call addChild on a primitive type Appointment.priority");
2376        }
2377        else if (name.equals("description")) {
2378          throw new FHIRException("Cannot call addChild on a primitive type Appointment.description");
2379        }
2380        else if (name.equals("supportingInformation")) {
2381          return addSupportingInformation();
2382        }
2383        else if (name.equals("start")) {
2384          throw new FHIRException("Cannot call addChild on a primitive type Appointment.start");
2385        }
2386        else if (name.equals("end")) {
2387          throw new FHIRException("Cannot call addChild on a primitive type Appointment.end");
2388        }
2389        else if (name.equals("minutesDuration")) {
2390          throw new FHIRException("Cannot call addChild on a primitive type Appointment.minutesDuration");
2391        }
2392        else if (name.equals("slot")) {
2393          return addSlot();
2394        }
2395        else if (name.equals("created")) {
2396          throw new FHIRException("Cannot call addChild on a primitive type Appointment.created");
2397        }
2398        else if (name.equals("comment")) {
2399          throw new FHIRException("Cannot call addChild on a primitive type Appointment.comment");
2400        }
2401        else if (name.equals("incomingReferral")) {
2402          return addIncomingReferral();
2403        }
2404        else if (name.equals("participant")) {
2405          return addParticipant();
2406        }
2407        else if (name.equals("requestedPeriod")) {
2408          return addRequestedPeriod();
2409        }
2410        else
2411          return super.addChild(name);
2412      }
2413
2414  public String fhirType() {
2415    return "Appointment";
2416
2417  }
2418
2419      public Appointment copy() {
2420        Appointment dst = new Appointment();
2421        copyValues(dst);
2422        if (identifier != null) {
2423          dst.identifier = new ArrayList<Identifier>();
2424          for (Identifier i : identifier)
2425            dst.identifier.add(i.copy());
2426        };
2427        dst.status = status == null ? null : status.copy();
2428        dst.serviceCategory = serviceCategory == null ? null : serviceCategory.copy();
2429        if (serviceType != null) {
2430          dst.serviceType = new ArrayList<CodeableConcept>();
2431          for (CodeableConcept i : serviceType)
2432            dst.serviceType.add(i.copy());
2433        };
2434        if (specialty != null) {
2435          dst.specialty = new ArrayList<CodeableConcept>();
2436          for (CodeableConcept i : specialty)
2437            dst.specialty.add(i.copy());
2438        };
2439        dst.appointmentType = appointmentType == null ? null : appointmentType.copy();
2440        if (reason != null) {
2441          dst.reason = new ArrayList<CodeableConcept>();
2442          for (CodeableConcept i : reason)
2443            dst.reason.add(i.copy());
2444        };
2445        if (indication != null) {
2446          dst.indication = new ArrayList<Reference>();
2447          for (Reference i : indication)
2448            dst.indication.add(i.copy());
2449        };
2450        dst.priority = priority == null ? null : priority.copy();
2451        dst.description = description == null ? null : description.copy();
2452        if (supportingInformation != null) {
2453          dst.supportingInformation = new ArrayList<Reference>();
2454          for (Reference i : supportingInformation)
2455            dst.supportingInformation.add(i.copy());
2456        };
2457        dst.start = start == null ? null : start.copy();
2458        dst.end = end == null ? null : end.copy();
2459        dst.minutesDuration = minutesDuration == null ? null : minutesDuration.copy();
2460        if (slot != null) {
2461          dst.slot = new ArrayList<Reference>();
2462          for (Reference i : slot)
2463            dst.slot.add(i.copy());
2464        };
2465        dst.created = created == null ? null : created.copy();
2466        dst.comment = comment == null ? null : comment.copy();
2467        if (incomingReferral != null) {
2468          dst.incomingReferral = new ArrayList<Reference>();
2469          for (Reference i : incomingReferral)
2470            dst.incomingReferral.add(i.copy());
2471        };
2472        if (participant != null) {
2473          dst.participant = new ArrayList<AppointmentParticipantComponent>();
2474          for (AppointmentParticipantComponent i : participant)
2475            dst.participant.add(i.copy());
2476        };
2477        if (requestedPeriod != null) {
2478          dst.requestedPeriod = new ArrayList<Period>();
2479          for (Period i : requestedPeriod)
2480            dst.requestedPeriod.add(i.copy());
2481        };
2482        return dst;
2483      }
2484
2485      protected Appointment typedCopy() {
2486        return copy();
2487      }
2488
2489      @Override
2490      public boolean equalsDeep(Base other_) {
2491        if (!super.equalsDeep(other_))
2492          return false;
2493        if (!(other_ instanceof Appointment))
2494          return false;
2495        Appointment o = (Appointment) other_;
2496        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(serviceCategory, o.serviceCategory, true)
2497           && compareDeep(serviceType, o.serviceType, true) && compareDeep(specialty, o.specialty, true) && compareDeep(appointmentType, o.appointmentType, true)
2498           && compareDeep(reason, o.reason, true) && compareDeep(indication, o.indication, true) && compareDeep(priority, o.priority, true)
2499           && compareDeep(description, o.description, true) && compareDeep(supportingInformation, o.supportingInformation, true)
2500           && compareDeep(start, o.start, true) && compareDeep(end, o.end, true) && compareDeep(minutesDuration, o.minutesDuration, true)
2501           && compareDeep(slot, o.slot, true) && compareDeep(created, o.created, true) && compareDeep(comment, o.comment, true)
2502           && compareDeep(incomingReferral, o.incomingReferral, true) && compareDeep(participant, o.participant, true)
2503           && compareDeep(requestedPeriod, o.requestedPeriod, true);
2504      }
2505
2506      @Override
2507      public boolean equalsShallow(Base other_) {
2508        if (!super.equalsShallow(other_))
2509          return false;
2510        if (!(other_ instanceof Appointment))
2511          return false;
2512        Appointment o = (Appointment) other_;
2513        return compareValues(status, o.status, true) && compareValues(priority, o.priority, true) && compareValues(description, o.description, true)
2514           && compareValues(start, o.start, true) && compareValues(end, o.end, true) && compareValues(minutesDuration, o.minutesDuration, true)
2515           && compareValues(created, o.created, true) && compareValues(comment, o.comment, true);
2516      }
2517
2518      public boolean isEmpty() {
2519        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, serviceCategory
2520          , serviceType, specialty, appointmentType, reason, indication, priority, description
2521          , supportingInformation, start, end, minutesDuration, slot, created, comment, incomingReferral
2522          , participant, requestedPeriod);
2523      }
2524
2525  @Override
2526  public ResourceType getResourceType() {
2527    return ResourceType.Appointment;
2528   }
2529
2530 /**
2531   * Search parameter: <b>date</b>
2532   * <p>
2533   * Description: <b>Appointment date/time.</b><br>
2534   * Type: <b>date</b><br>
2535   * Path: <b>Appointment.start</b><br>
2536   * </p>
2537   */
2538  @SearchParamDefinition(name="date", path="Appointment.start", description="Appointment date/time.", type="date" )
2539  public static final String SP_DATE = "date";
2540 /**
2541   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2542   * <p>
2543   * Description: <b>Appointment date/time.</b><br>
2544   * Type: <b>date</b><br>
2545   * Path: <b>Appointment.start</b><br>
2546   * </p>
2547   */
2548  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2549
2550 /**
2551   * Search parameter: <b>actor</b>
2552   * <p>
2553   * Description: <b>Any one of the individuals participating in the appointment</b><br>
2554   * Type: <b>reference</b><br>
2555   * Path: <b>Appointment.participant.actor</b><br>
2556   * </p>
2557   */
2558  @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="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Device.class, HealthcareService.class, Location.class, Patient.class, Practitioner.class, RelatedPerson.class } )
2559  public static final String SP_ACTOR = "actor";
2560 /**
2561   * <b>Fluent Client</b> search parameter constant for <b>actor</b>
2562   * <p>
2563   * Description: <b>Any one of the individuals participating in the appointment</b><br>
2564   * Type: <b>reference</b><br>
2565   * Path: <b>Appointment.participant.actor</b><br>
2566   * </p>
2567   */
2568  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ACTOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ACTOR);
2569
2570/**
2571   * Constant for fluent queries to be used to add include statements. Specifies
2572   * the path value of "<b>Appointment:actor</b>".
2573   */
2574  public static final ca.uhn.fhir.model.api.Include INCLUDE_ACTOR = new ca.uhn.fhir.model.api.Include("Appointment:actor").toLocked();
2575
2576 /**
2577   * Search parameter: <b>identifier</b>
2578   * <p>
2579   * Description: <b>An Identifier of the Appointment</b><br>
2580   * Type: <b>token</b><br>
2581   * Path: <b>Appointment.identifier</b><br>
2582   * </p>
2583   */
2584  @SearchParamDefinition(name="identifier", path="Appointment.identifier", description="An Identifier of the Appointment", type="token" )
2585  public static final String SP_IDENTIFIER = "identifier";
2586 /**
2587   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2588   * <p>
2589   * Description: <b>An Identifier of the Appointment</b><br>
2590   * Type: <b>token</b><br>
2591   * Path: <b>Appointment.identifier</b><br>
2592   * </p>
2593   */
2594  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2595
2596 /**
2597   * Search parameter: <b>practitioner</b>
2598   * <p>
2599   * Description: <b>One of the individuals of the appointment is this practitioner</b><br>
2600   * Type: <b>reference</b><br>
2601   * Path: <b>Appointment.participant.actor</b><br>
2602   * </p>
2603   */
2604  @SearchParamDefinition(name="practitioner", path="Appointment.participant.actor", description="One of the individuals of the appointment is this practitioner", type="reference", target={Practitioner.class } )
2605  public static final String SP_PRACTITIONER = "practitioner";
2606 /**
2607   * <b>Fluent Client</b> search parameter constant for <b>practitioner</b>
2608   * <p>
2609   * Description: <b>One of the individuals of the appointment is this practitioner</b><br>
2610   * Type: <b>reference</b><br>
2611   * Path: <b>Appointment.participant.actor</b><br>
2612   * </p>
2613   */
2614  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRACTITIONER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRACTITIONER);
2615
2616/**
2617   * Constant for fluent queries to be used to add include statements. Specifies
2618   * the path value of "<b>Appointment:practitioner</b>".
2619   */
2620  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRACTITIONER = new ca.uhn.fhir.model.api.Include("Appointment:practitioner").toLocked();
2621
2622 /**
2623   * Search parameter: <b>incomingreferral</b>
2624   * <p>
2625   * Description: <b>The ReferralRequest provided as information to allocate to the Encounter</b><br>
2626   * Type: <b>reference</b><br>
2627   * Path: <b>Appointment.incomingReferral</b><br>
2628   * </p>
2629   */
2630  @SearchParamDefinition(name="incomingreferral", path="Appointment.incomingReferral", description="The ReferralRequest provided as information to allocate to the Encounter", type="reference", target={ReferralRequest.class } )
2631  public static final String SP_INCOMINGREFERRAL = "incomingreferral";
2632 /**
2633   * <b>Fluent Client</b> search parameter constant for <b>incomingreferral</b>
2634   * <p>
2635   * Description: <b>The ReferralRequest provided as information to allocate to the Encounter</b><br>
2636   * Type: <b>reference</b><br>
2637   * Path: <b>Appointment.incomingReferral</b><br>
2638   * </p>
2639   */
2640  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INCOMINGREFERRAL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INCOMINGREFERRAL);
2641
2642/**
2643   * Constant for fluent queries to be used to add include statements. Specifies
2644   * the path value of "<b>Appointment:incomingreferral</b>".
2645   */
2646  public static final ca.uhn.fhir.model.api.Include INCLUDE_INCOMINGREFERRAL = new ca.uhn.fhir.model.api.Include("Appointment:incomingreferral").toLocked();
2647
2648 /**
2649   * Search parameter: <b>part-status</b>
2650   * <p>
2651   * 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>
2652   * Type: <b>token</b><br>
2653   * Path: <b>Appointment.participant.status</b><br>
2654   * </p>
2655   */
2656  @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" )
2657  public static final String SP_PART_STATUS = "part-status";
2658 /**
2659   * <b>Fluent Client</b> search parameter constant for <b>part-status</b>
2660   * <p>
2661   * 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>
2662   * Type: <b>token</b><br>
2663   * Path: <b>Appointment.participant.status</b><br>
2664   * </p>
2665   */
2666  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PART_STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PART_STATUS);
2667
2668 /**
2669   * Search parameter: <b>patient</b>
2670   * <p>
2671   * Description: <b>One of the individuals of the appointment is this patient</b><br>
2672   * Type: <b>reference</b><br>
2673   * Path: <b>Appointment.participant.actor</b><br>
2674   * </p>
2675   */
2676  @SearchParamDefinition(name="patient", path="Appointment.participant.actor", description="One of the individuals of the appointment is this patient", type="reference", target={Patient.class } )
2677  public static final String SP_PATIENT = "patient";
2678 /**
2679   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2680   * <p>
2681   * Description: <b>One of the individuals of the appointment is this patient</b><br>
2682   * Type: <b>reference</b><br>
2683   * Path: <b>Appointment.participant.actor</b><br>
2684   * </p>
2685   */
2686  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2687
2688/**
2689   * Constant for fluent queries to be used to add include statements. Specifies
2690   * the path value of "<b>Appointment:patient</b>".
2691   */
2692  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Appointment:patient").toLocked();
2693
2694 /**
2695   * Search parameter: <b>appointment-type</b>
2696   * <p>
2697   * Description: <b>The style of appointment or patient that has been booked in the slot (not service type)</b><br>
2698   * Type: <b>token</b><br>
2699   * Path: <b>Appointment.appointmentType</b><br>
2700   * </p>
2701   */
2702  @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" )
2703  public static final String SP_APPOINTMENT_TYPE = "appointment-type";
2704 /**
2705   * <b>Fluent Client</b> search parameter constant for <b>appointment-type</b>
2706   * <p>
2707   * Description: <b>The style of appointment or patient that has been booked in the slot (not service type)</b><br>
2708   * Type: <b>token</b><br>
2709   * Path: <b>Appointment.appointmentType</b><br>
2710   * </p>
2711   */
2712  public static final ca.uhn.fhir.rest.gclient.TokenClientParam APPOINTMENT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_APPOINTMENT_TYPE);
2713
2714 /**
2715   * Search parameter: <b>service-type</b>
2716   * <p>
2717   * Description: <b>The specific service that is to be performed during this appointment</b><br>
2718   * Type: <b>token</b><br>
2719   * Path: <b>Appointment.serviceType</b><br>
2720   * </p>
2721   */
2722  @SearchParamDefinition(name="service-type", path="Appointment.serviceType", description="The specific service that is to be performed during this appointment", type="token" )
2723  public static final String SP_SERVICE_TYPE = "service-type";
2724 /**
2725   * <b>Fluent Client</b> search parameter constant for <b>service-type</b>
2726   * <p>
2727   * Description: <b>The specific service that is to be performed during this appointment</b><br>
2728   * Type: <b>token</b><br>
2729   * Path: <b>Appointment.serviceType</b><br>
2730   * </p>
2731   */
2732  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SERVICE_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SERVICE_TYPE);
2733
2734 /**
2735   * Search parameter: <b>location</b>
2736   * <p>
2737   * Description: <b>This location is listed in the participants of the appointment</b><br>
2738   * Type: <b>reference</b><br>
2739   * Path: <b>Appointment.participant.actor</b><br>
2740   * </p>
2741   */
2742  @SearchParamDefinition(name="location", path="Appointment.participant.actor", description="This location is listed in the participants of the appointment", type="reference", target={Location.class } )
2743  public static final String SP_LOCATION = "location";
2744 /**
2745   * <b>Fluent Client</b> search parameter constant for <b>location</b>
2746   * <p>
2747   * Description: <b>This location is listed in the participants of the appointment</b><br>
2748   * Type: <b>reference</b><br>
2749   * Path: <b>Appointment.participant.actor</b><br>
2750   * </p>
2751   */
2752  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
2753
2754/**
2755   * Constant for fluent queries to be used to add include statements. Specifies
2756   * the path value of "<b>Appointment:location</b>".
2757   */
2758  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("Appointment:location").toLocked();
2759
2760 /**
2761   * Search parameter: <b>status</b>
2762   * <p>
2763   * Description: <b>The overall status of the appointment</b><br>
2764   * Type: <b>token</b><br>
2765   * Path: <b>Appointment.status</b><br>
2766   * </p>
2767   */
2768  @SearchParamDefinition(name="status", path="Appointment.status", description="The overall status of the appointment", type="token" )
2769  public static final String SP_STATUS = "status";
2770 /**
2771   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2772   * <p>
2773   * Description: <b>The overall status of the appointment</b><br>
2774   * Type: <b>token</b><br>
2775   * Path: <b>Appointment.status</b><br>
2776   * </p>
2777   */
2778  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2779
2780
2781}