001package org.hl7.fhir.r4.model;
002
003/*-
004 * #%L
005 * org.hl7.fhir.r4
006 * %%
007 * Copyright (C) 2014 - 2019 Health Level 7
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 * 
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 * 
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023/*
024  Copyright (c) 2011+, HL7, Inc.
025  All rights reserved.
026  
027  Redistribution and use in source and binary forms, with or without modification, 
028  are permitted provided that the following conditions are met:
029  
030   * Redistributions of source code must retain the above copyright notice, this 
031     list of conditions and the following disclaimer.
032   * Redistributions in binary form must reproduce the above copyright notice, 
033     this list of conditions and the following disclaimer in the documentation 
034     and/or other materials provided with the distribution.
035   * Neither the name of HL7 nor the names of its contributors may be used to 
036     endorse or promote products derived from this software without specific 
037     prior written permission.
038  
039  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
040  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
041  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
042  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
043  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
044  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
045  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
046  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
047  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
048  POSSIBILITY OF SUCH DAMAGE.
049  
050*/
051
052// Generated on Thu, Dec 13, 2018 14:07+1100 for FHIR v4.0.0
053import java.util.ArrayList;
054import java.util.Date;
055import java.util.List;
056
057import org.hl7.fhir.exceptions.FHIRException;
058import org.hl7.fhir.utilities.Utilities;
059
060import ca.uhn.fhir.model.api.annotation.Child;
061import ca.uhn.fhir.model.api.annotation.Description;
062import ca.uhn.fhir.model.api.annotation.ResourceDef;
063import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
064/**
065 * A slot of time on a schedule that may be available for booking appointments.
066 */
067@ResourceDef(name="Slot", profile="http://hl7.org/fhir/StructureDefinition/Slot")
068public class Slot extends DomainResource {
069
070    public enum SlotStatus {
071        /**
072         * Indicates that the time interval is busy because one  or more events have been scheduled for that interval.
073         */
074        BUSY, 
075        /**
076         * Indicates that the time interval is free for scheduling.
077         */
078        FREE, 
079        /**
080         * Indicates that the time interval is busy and that the interval cannot be scheduled.
081         */
082        BUSYUNAVAILABLE, 
083        /**
084         * Indicates that the time interval is busy because one or more events have been tentatively scheduled for that interval.
085         */
086        BUSYTENTATIVE, 
087        /**
088         * This instance should not have been part of this patient's medical record.
089         */
090        ENTEREDINERROR, 
091        /**
092         * added to help the parsers with the generic types
093         */
094        NULL;
095        public static SlotStatus fromCode(String codeString) throws FHIRException {
096            if (codeString == null || "".equals(codeString))
097                return null;
098        if ("busy".equals(codeString))
099          return BUSY;
100        if ("free".equals(codeString))
101          return FREE;
102        if ("busy-unavailable".equals(codeString))
103          return BUSYUNAVAILABLE;
104        if ("busy-tentative".equals(codeString))
105          return BUSYTENTATIVE;
106        if ("entered-in-error".equals(codeString))
107          return ENTEREDINERROR;
108        if (Configuration.isAcceptInvalidEnums())
109          return null;
110        else
111          throw new FHIRException("Unknown SlotStatus code '"+codeString+"'");
112        }
113        public String toCode() {
114          switch (this) {
115            case BUSY: return "busy";
116            case FREE: return "free";
117            case BUSYUNAVAILABLE: return "busy-unavailable";
118            case BUSYTENTATIVE: return "busy-tentative";
119            case ENTEREDINERROR: return "entered-in-error";
120            default: return "?";
121          }
122        }
123        public String getSystem() {
124          switch (this) {
125            case BUSY: return "http://hl7.org/fhir/slotstatus";
126            case FREE: return "http://hl7.org/fhir/slotstatus";
127            case BUSYUNAVAILABLE: return "http://hl7.org/fhir/slotstatus";
128            case BUSYTENTATIVE: return "http://hl7.org/fhir/slotstatus";
129            case ENTEREDINERROR: return "http://hl7.org/fhir/slotstatus";
130            default: return "?";
131          }
132        }
133        public String getDefinition() {
134          switch (this) {
135            case BUSY: return "Indicates that the time interval is busy because one  or more events have been scheduled for that interval.";
136            case FREE: return "Indicates that the time interval is free for scheduling.";
137            case BUSYUNAVAILABLE: return "Indicates that the time interval is busy and that the interval cannot be scheduled.";
138            case BUSYTENTATIVE: return "Indicates that the time interval is busy because one or more events have been tentatively scheduled for that interval.";
139            case ENTEREDINERROR: return "This instance should not have been part of this patient's medical record.";
140            default: return "?";
141          }
142        }
143        public String getDisplay() {
144          switch (this) {
145            case BUSY: return "Busy";
146            case FREE: return "Free";
147            case BUSYUNAVAILABLE: return "Busy (Unavailable)";
148            case BUSYTENTATIVE: return "Busy (Tentative)";
149            case ENTEREDINERROR: return "Entered in error";
150            default: return "?";
151          }
152        }
153    }
154
155  public static class SlotStatusEnumFactory implements EnumFactory<SlotStatus> {
156    public SlotStatus fromCode(String codeString) throws IllegalArgumentException {
157      if (codeString == null || "".equals(codeString))
158            if (codeString == null || "".equals(codeString))
159                return null;
160        if ("busy".equals(codeString))
161          return SlotStatus.BUSY;
162        if ("free".equals(codeString))
163          return SlotStatus.FREE;
164        if ("busy-unavailable".equals(codeString))
165          return SlotStatus.BUSYUNAVAILABLE;
166        if ("busy-tentative".equals(codeString))
167          return SlotStatus.BUSYTENTATIVE;
168        if ("entered-in-error".equals(codeString))
169          return SlotStatus.ENTEREDINERROR;
170        throw new IllegalArgumentException("Unknown SlotStatus code '"+codeString+"'");
171        }
172        public Enumeration<SlotStatus> fromType(Base code) throws FHIRException {
173          if (code == null)
174            return null;
175          if (code.isEmpty())
176            return new Enumeration<SlotStatus>(this);
177          String codeString = ((PrimitiveType) code).asStringValue();
178          if (codeString == null || "".equals(codeString))
179            return null;
180        if ("busy".equals(codeString))
181          return new Enumeration<SlotStatus>(this, SlotStatus.BUSY);
182        if ("free".equals(codeString))
183          return new Enumeration<SlotStatus>(this, SlotStatus.FREE);
184        if ("busy-unavailable".equals(codeString))
185          return new Enumeration<SlotStatus>(this, SlotStatus.BUSYUNAVAILABLE);
186        if ("busy-tentative".equals(codeString))
187          return new Enumeration<SlotStatus>(this, SlotStatus.BUSYTENTATIVE);
188        if ("entered-in-error".equals(codeString))
189          return new Enumeration<SlotStatus>(this, SlotStatus.ENTEREDINERROR);
190        throw new FHIRException("Unknown SlotStatus code '"+codeString+"'");
191        }
192    public String toCode(SlotStatus code) {
193      if (code == SlotStatus.BUSY)
194        return "busy";
195      if (code == SlotStatus.FREE)
196        return "free";
197      if (code == SlotStatus.BUSYUNAVAILABLE)
198        return "busy-unavailable";
199      if (code == SlotStatus.BUSYTENTATIVE)
200        return "busy-tentative";
201      if (code == SlotStatus.ENTEREDINERROR)
202        return "entered-in-error";
203      return "?";
204      }
205    public String toSystem(SlotStatus code) {
206      return code.getSystem();
207      }
208    }
209
210    /**
211     * External Ids for this item.
212     */
213    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
214    @Description(shortDefinition="External Ids for this item", formalDefinition="External Ids for this item." )
215    protected List<Identifier> identifier;
216
217    /**
218     * A broad categorization of the service that is to be performed during this appointment.
219     */
220    @Child(name = "serviceCategory", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
221    @Description(shortDefinition="A broad categorization of the service that is to be performed during this appointment", formalDefinition="A broad categorization of the service that is to be performed during this appointment." )
222    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-category")
223    protected List<CodeableConcept> serviceCategory;
224
225    /**
226     * The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource.
227     */
228    @Child(name = "serviceType", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
229    @Description(shortDefinition="The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource", formalDefinition="The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource." )
230    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-type")
231    protected List<CodeableConcept> serviceType;
232
233    /**
234     * The specialty of a practitioner that would be required to perform the service requested in this appointment.
235     */
236    @Child(name = "specialty", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
237    @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." )
238    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/c80-practice-codes")
239    protected List<CodeableConcept> specialty;
240
241    /**
242     * The style of appointment or patient that may be booked in the slot (not service type).
243     */
244    @Child(name = "appointmentType", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=true)
245    @Description(shortDefinition="The style of appointment or patient that may be booked in the slot (not service type)", formalDefinition="The style of appointment or patient that may be booked in the slot (not service type)." )
246    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v2-0276")
247    protected CodeableConcept appointmentType;
248
249    /**
250     * The schedule resource that this slot defines an interval of status information.
251     */
252    @Child(name = "schedule", type = {Schedule.class}, order=5, min=1, max=1, modifier=false, summary=true)
253    @Description(shortDefinition="The schedule resource that this slot defines an interval of status information", formalDefinition="The schedule resource that this slot defines an interval of status information." )
254    protected Reference schedule;
255
256    /**
257     * The actual object that is the target of the reference (The schedule resource that this slot defines an interval of status information.)
258     */
259    protected Schedule scheduleTarget;
260
261    /**
262     * busy | free | busy-unavailable | busy-tentative | entered-in-error.
263     */
264    @Child(name = "status", type = {CodeType.class}, order=6, min=1, max=1, modifier=false, summary=true)
265    @Description(shortDefinition="busy | free | busy-unavailable | busy-tentative | entered-in-error", formalDefinition="busy | free | busy-unavailable | busy-tentative | entered-in-error." )
266    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/slotstatus")
267    protected Enumeration<SlotStatus> status;
268
269    /**
270     * Date/Time that the slot is to begin.
271     */
272    @Child(name = "start", type = {InstantType.class}, order=7, min=1, max=1, modifier=false, summary=true)
273    @Description(shortDefinition="Date/Time that the slot is to begin", formalDefinition="Date/Time that the slot is to begin." )
274    protected InstantType start;
275
276    /**
277     * Date/Time that the slot is to conclude.
278     */
279    @Child(name = "end", type = {InstantType.class}, order=8, min=1, max=1, modifier=false, summary=true)
280    @Description(shortDefinition="Date/Time that the slot is to conclude", formalDefinition="Date/Time that the slot is to conclude." )
281    protected InstantType end;
282
283    /**
284     * This slot has already been overbooked, appointments are unlikely to be accepted for this time.
285     */
286    @Child(name = "overbooked", type = {BooleanType.class}, order=9, min=0, max=1, modifier=false, summary=false)
287    @Description(shortDefinition="This slot has already been overbooked, appointments are unlikely to be accepted for this time", formalDefinition="This slot has already been overbooked, appointments are unlikely to be accepted for this time." )
288    protected BooleanType overbooked;
289
290    /**
291     * Comments on the slot to describe any extended information. Such as custom constraints on the slot.
292     */
293    @Child(name = "comment", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
294    @Description(shortDefinition="Comments on the slot to describe any extended information. Such as custom constraints on the slot", formalDefinition="Comments on the slot to describe any extended information. Such as custom constraints on the slot." )
295    protected StringType comment;
296
297    private static final long serialVersionUID = 683481856L;
298
299  /**
300   * Constructor
301   */
302    public Slot() {
303      super();
304    }
305
306  /**
307   * Constructor
308   */
309    public Slot(Reference schedule, Enumeration<SlotStatus> status, InstantType start, InstantType end) {
310      super();
311      this.schedule = schedule;
312      this.status = status;
313      this.start = start;
314      this.end = end;
315    }
316
317    /**
318     * @return {@link #identifier} (External Ids for this item.)
319     */
320    public List<Identifier> getIdentifier() { 
321      if (this.identifier == null)
322        this.identifier = new ArrayList<Identifier>();
323      return this.identifier;
324    }
325
326    /**
327     * @return Returns a reference to <code>this</code> for easy method chaining
328     */
329    public Slot setIdentifier(List<Identifier> theIdentifier) { 
330      this.identifier = theIdentifier;
331      return this;
332    }
333
334    public boolean hasIdentifier() { 
335      if (this.identifier == null)
336        return false;
337      for (Identifier item : this.identifier)
338        if (!item.isEmpty())
339          return true;
340      return false;
341    }
342
343    public Identifier addIdentifier() { //3
344      Identifier t = new Identifier();
345      if (this.identifier == null)
346        this.identifier = new ArrayList<Identifier>();
347      this.identifier.add(t);
348      return t;
349    }
350
351    public Slot addIdentifier(Identifier t) { //3
352      if (t == null)
353        return this;
354      if (this.identifier == null)
355        this.identifier = new ArrayList<Identifier>();
356      this.identifier.add(t);
357      return this;
358    }
359
360    /**
361     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
362     */
363    public Identifier getIdentifierFirstRep() { 
364      if (getIdentifier().isEmpty()) {
365        addIdentifier();
366      }
367      return getIdentifier().get(0);
368    }
369
370    /**
371     * @return {@link #serviceCategory} (A broad categorization of the service that is to be performed during this appointment.)
372     */
373    public List<CodeableConcept> getServiceCategory() { 
374      if (this.serviceCategory == null)
375        this.serviceCategory = new ArrayList<CodeableConcept>();
376      return this.serviceCategory;
377    }
378
379    /**
380     * @return Returns a reference to <code>this</code> for easy method chaining
381     */
382    public Slot setServiceCategory(List<CodeableConcept> theServiceCategory) { 
383      this.serviceCategory = theServiceCategory;
384      return this;
385    }
386
387    public boolean hasServiceCategory() { 
388      if (this.serviceCategory == null)
389        return false;
390      for (CodeableConcept item : this.serviceCategory)
391        if (!item.isEmpty())
392          return true;
393      return false;
394    }
395
396    public CodeableConcept addServiceCategory() { //3
397      CodeableConcept t = new CodeableConcept();
398      if (this.serviceCategory == null)
399        this.serviceCategory = new ArrayList<CodeableConcept>();
400      this.serviceCategory.add(t);
401      return t;
402    }
403
404    public Slot addServiceCategory(CodeableConcept t) { //3
405      if (t == null)
406        return this;
407      if (this.serviceCategory == null)
408        this.serviceCategory = new ArrayList<CodeableConcept>();
409      this.serviceCategory.add(t);
410      return this;
411    }
412
413    /**
414     * @return The first repetition of repeating field {@link #serviceCategory}, creating it if it does not already exist
415     */
416    public CodeableConcept getServiceCategoryFirstRep() { 
417      if (getServiceCategory().isEmpty()) {
418        addServiceCategory();
419      }
420      return getServiceCategory().get(0);
421    }
422
423    /**
424     * @return {@link #serviceType} (The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource.)
425     */
426    public List<CodeableConcept> getServiceType() { 
427      if (this.serviceType == null)
428        this.serviceType = new ArrayList<CodeableConcept>();
429      return this.serviceType;
430    }
431
432    /**
433     * @return Returns a reference to <code>this</code> for easy method chaining
434     */
435    public Slot setServiceType(List<CodeableConcept> theServiceType) { 
436      this.serviceType = theServiceType;
437      return this;
438    }
439
440    public boolean hasServiceType() { 
441      if (this.serviceType == null)
442        return false;
443      for (CodeableConcept item : this.serviceType)
444        if (!item.isEmpty())
445          return true;
446      return false;
447    }
448
449    public CodeableConcept addServiceType() { //3
450      CodeableConcept t = new CodeableConcept();
451      if (this.serviceType == null)
452        this.serviceType = new ArrayList<CodeableConcept>();
453      this.serviceType.add(t);
454      return t;
455    }
456
457    public Slot addServiceType(CodeableConcept t) { //3
458      if (t == null)
459        return this;
460      if (this.serviceType == null)
461        this.serviceType = new ArrayList<CodeableConcept>();
462      this.serviceType.add(t);
463      return this;
464    }
465
466    /**
467     * @return The first repetition of repeating field {@link #serviceType}, creating it if it does not already exist
468     */
469    public CodeableConcept getServiceTypeFirstRep() { 
470      if (getServiceType().isEmpty()) {
471        addServiceType();
472      }
473      return getServiceType().get(0);
474    }
475
476    /**
477     * @return {@link #specialty} (The specialty of a practitioner that would be required to perform the service requested in this appointment.)
478     */
479    public List<CodeableConcept> getSpecialty() { 
480      if (this.specialty == null)
481        this.specialty = new ArrayList<CodeableConcept>();
482      return this.specialty;
483    }
484
485    /**
486     * @return Returns a reference to <code>this</code> for easy method chaining
487     */
488    public Slot setSpecialty(List<CodeableConcept> theSpecialty) { 
489      this.specialty = theSpecialty;
490      return this;
491    }
492
493    public boolean hasSpecialty() { 
494      if (this.specialty == null)
495        return false;
496      for (CodeableConcept item : this.specialty)
497        if (!item.isEmpty())
498          return true;
499      return false;
500    }
501
502    public CodeableConcept addSpecialty() { //3
503      CodeableConcept t = new CodeableConcept();
504      if (this.specialty == null)
505        this.specialty = new ArrayList<CodeableConcept>();
506      this.specialty.add(t);
507      return t;
508    }
509
510    public Slot addSpecialty(CodeableConcept t) { //3
511      if (t == null)
512        return this;
513      if (this.specialty == null)
514        this.specialty = new ArrayList<CodeableConcept>();
515      this.specialty.add(t);
516      return this;
517    }
518
519    /**
520     * @return The first repetition of repeating field {@link #specialty}, creating it if it does not already exist
521     */
522    public CodeableConcept getSpecialtyFirstRep() { 
523      if (getSpecialty().isEmpty()) {
524        addSpecialty();
525      }
526      return getSpecialty().get(0);
527    }
528
529    /**
530     * @return {@link #appointmentType} (The style of appointment or patient that may be booked in the slot (not service type).)
531     */
532    public CodeableConcept getAppointmentType() { 
533      if (this.appointmentType == null)
534        if (Configuration.errorOnAutoCreate())
535          throw new Error("Attempt to auto-create Slot.appointmentType");
536        else if (Configuration.doAutoCreate())
537          this.appointmentType = new CodeableConcept(); // cc
538      return this.appointmentType;
539    }
540
541    public boolean hasAppointmentType() { 
542      return this.appointmentType != null && !this.appointmentType.isEmpty();
543    }
544
545    /**
546     * @param value {@link #appointmentType} (The style of appointment or patient that may be booked in the slot (not service type).)
547     */
548    public Slot setAppointmentType(CodeableConcept value) { 
549      this.appointmentType = value;
550      return this;
551    }
552
553    /**
554     * @return {@link #schedule} (The schedule resource that this slot defines an interval of status information.)
555     */
556    public Reference getSchedule() { 
557      if (this.schedule == null)
558        if (Configuration.errorOnAutoCreate())
559          throw new Error("Attempt to auto-create Slot.schedule");
560        else if (Configuration.doAutoCreate())
561          this.schedule = new Reference(); // cc
562      return this.schedule;
563    }
564
565    public boolean hasSchedule() { 
566      return this.schedule != null && !this.schedule.isEmpty();
567    }
568
569    /**
570     * @param value {@link #schedule} (The schedule resource that this slot defines an interval of status information.)
571     */
572    public Slot setSchedule(Reference value) { 
573      this.schedule = value;
574      return this;
575    }
576
577    /**
578     * @return {@link #schedule} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The schedule resource that this slot defines an interval of status information.)
579     */
580    public Schedule getScheduleTarget() { 
581      if (this.scheduleTarget == null)
582        if (Configuration.errorOnAutoCreate())
583          throw new Error("Attempt to auto-create Slot.schedule");
584        else if (Configuration.doAutoCreate())
585          this.scheduleTarget = new Schedule(); // aa
586      return this.scheduleTarget;
587    }
588
589    /**
590     * @param value {@link #schedule} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The schedule resource that this slot defines an interval of status information.)
591     */
592    public Slot setScheduleTarget(Schedule value) { 
593      this.scheduleTarget = value;
594      return this;
595    }
596
597    /**
598     * @return {@link #status} (busy | free | busy-unavailable | busy-tentative | entered-in-error.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
599     */
600    public Enumeration<SlotStatus> getStatusElement() { 
601      if (this.status == null)
602        if (Configuration.errorOnAutoCreate())
603          throw new Error("Attempt to auto-create Slot.status");
604        else if (Configuration.doAutoCreate())
605          this.status = new Enumeration<SlotStatus>(new SlotStatusEnumFactory()); // bb
606      return this.status;
607    }
608
609    public boolean hasStatusElement() { 
610      return this.status != null && !this.status.isEmpty();
611    }
612
613    public boolean hasStatus() { 
614      return this.status != null && !this.status.isEmpty();
615    }
616
617    /**
618     * @param value {@link #status} (busy | free | busy-unavailable | busy-tentative | entered-in-error.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
619     */
620    public Slot setStatusElement(Enumeration<SlotStatus> value) { 
621      this.status = value;
622      return this;
623    }
624
625    /**
626     * @return busy | free | busy-unavailable | busy-tentative | entered-in-error.
627     */
628    public SlotStatus getStatus() { 
629      return this.status == null ? null : this.status.getValue();
630    }
631
632    /**
633     * @param value busy | free | busy-unavailable | busy-tentative | entered-in-error.
634     */
635    public Slot setStatus(SlotStatus value) { 
636        if (this.status == null)
637          this.status = new Enumeration<SlotStatus>(new SlotStatusEnumFactory());
638        this.status.setValue(value);
639      return this;
640    }
641
642    /**
643     * @return {@link #start} (Date/Time that the slot is to begin.). This is the underlying object with id, value and extensions. The accessor "getStart" gives direct access to the value
644     */
645    public InstantType getStartElement() { 
646      if (this.start == null)
647        if (Configuration.errorOnAutoCreate())
648          throw new Error("Attempt to auto-create Slot.start");
649        else if (Configuration.doAutoCreate())
650          this.start = new InstantType(); // bb
651      return this.start;
652    }
653
654    public boolean hasStartElement() { 
655      return this.start != null && !this.start.isEmpty();
656    }
657
658    public boolean hasStart() { 
659      return this.start != null && !this.start.isEmpty();
660    }
661
662    /**
663     * @param value {@link #start} (Date/Time that the slot is to begin.). This is the underlying object with id, value and extensions. The accessor "getStart" gives direct access to the value
664     */
665    public Slot setStartElement(InstantType value) { 
666      this.start = value;
667      return this;
668    }
669
670    /**
671     * @return Date/Time that the slot is to begin.
672     */
673    public Date getStart() { 
674      return this.start == null ? null : this.start.getValue();
675    }
676
677    /**
678     * @param value Date/Time that the slot is to begin.
679     */
680    public Slot setStart(Date value) { 
681        if (this.start == null)
682          this.start = new InstantType();
683        this.start.setValue(value);
684      return this;
685    }
686
687    /**
688     * @return {@link #end} (Date/Time that the slot is to conclude.). This is the underlying object with id, value and extensions. The accessor "getEnd" gives direct access to the value
689     */
690    public InstantType getEndElement() { 
691      if (this.end == null)
692        if (Configuration.errorOnAutoCreate())
693          throw new Error("Attempt to auto-create Slot.end");
694        else if (Configuration.doAutoCreate())
695          this.end = new InstantType(); // bb
696      return this.end;
697    }
698
699    public boolean hasEndElement() { 
700      return this.end != null && !this.end.isEmpty();
701    }
702
703    public boolean hasEnd() { 
704      return this.end != null && !this.end.isEmpty();
705    }
706
707    /**
708     * @param value {@link #end} (Date/Time that the slot is to conclude.). This is the underlying object with id, value and extensions. The accessor "getEnd" gives direct access to the value
709     */
710    public Slot setEndElement(InstantType value) { 
711      this.end = value;
712      return this;
713    }
714
715    /**
716     * @return Date/Time that the slot is to conclude.
717     */
718    public Date getEnd() { 
719      return this.end == null ? null : this.end.getValue();
720    }
721
722    /**
723     * @param value Date/Time that the slot is to conclude.
724     */
725    public Slot setEnd(Date value) { 
726        if (this.end == null)
727          this.end = new InstantType();
728        this.end.setValue(value);
729      return this;
730    }
731
732    /**
733     * @return {@link #overbooked} (This slot has already been overbooked, appointments are unlikely to be accepted for this time.). This is the underlying object with id, value and extensions. The accessor "getOverbooked" gives direct access to the value
734     */
735    public BooleanType getOverbookedElement() { 
736      if (this.overbooked == null)
737        if (Configuration.errorOnAutoCreate())
738          throw new Error("Attempt to auto-create Slot.overbooked");
739        else if (Configuration.doAutoCreate())
740          this.overbooked = new BooleanType(); // bb
741      return this.overbooked;
742    }
743
744    public boolean hasOverbookedElement() { 
745      return this.overbooked != null && !this.overbooked.isEmpty();
746    }
747
748    public boolean hasOverbooked() { 
749      return this.overbooked != null && !this.overbooked.isEmpty();
750    }
751
752    /**
753     * @param value {@link #overbooked} (This slot has already been overbooked, appointments are unlikely to be accepted for this time.). This is the underlying object with id, value and extensions. The accessor "getOverbooked" gives direct access to the value
754     */
755    public Slot setOverbookedElement(BooleanType value) { 
756      this.overbooked = value;
757      return this;
758    }
759
760    /**
761     * @return This slot has already been overbooked, appointments are unlikely to be accepted for this time.
762     */
763    public boolean getOverbooked() { 
764      return this.overbooked == null || this.overbooked.isEmpty() ? false : this.overbooked.getValue();
765    }
766
767    /**
768     * @param value This slot has already been overbooked, appointments are unlikely to be accepted for this time.
769     */
770    public Slot setOverbooked(boolean value) { 
771        if (this.overbooked == null)
772          this.overbooked = new BooleanType();
773        this.overbooked.setValue(value);
774      return this;
775    }
776
777    /**
778     * @return {@link #comment} (Comments on the slot to describe any extended information. Such as custom constraints on the slot.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
779     */
780    public StringType getCommentElement() { 
781      if (this.comment == null)
782        if (Configuration.errorOnAutoCreate())
783          throw new Error("Attempt to auto-create Slot.comment");
784        else if (Configuration.doAutoCreate())
785          this.comment = new StringType(); // bb
786      return this.comment;
787    }
788
789    public boolean hasCommentElement() { 
790      return this.comment != null && !this.comment.isEmpty();
791    }
792
793    public boolean hasComment() { 
794      return this.comment != null && !this.comment.isEmpty();
795    }
796
797    /**
798     * @param value {@link #comment} (Comments on the slot to describe any extended information. Such as custom constraints on the slot.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
799     */
800    public Slot setCommentElement(StringType value) { 
801      this.comment = value;
802      return this;
803    }
804
805    /**
806     * @return Comments on the slot to describe any extended information. Such as custom constraints on the slot.
807     */
808    public String getComment() { 
809      return this.comment == null ? null : this.comment.getValue();
810    }
811
812    /**
813     * @param value Comments on the slot to describe any extended information. Such as custom constraints on the slot.
814     */
815    public Slot setComment(String value) { 
816      if (Utilities.noString(value))
817        this.comment = null;
818      else {
819        if (this.comment == null)
820          this.comment = new StringType();
821        this.comment.setValue(value);
822      }
823      return this;
824    }
825
826      protected void listChildren(List<Property> children) {
827        super.listChildren(children);
828        children.add(new Property("identifier", "Identifier", "External Ids for this item.", 0, java.lang.Integer.MAX_VALUE, identifier));
829        children.add(new Property("serviceCategory", "CodeableConcept", "A broad categorization of the service that is to be performed during this appointment.", 0, java.lang.Integer.MAX_VALUE, serviceCategory));
830        children.add(new Property("serviceType", "CodeableConcept", "The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource.", 0, java.lang.Integer.MAX_VALUE, serviceType));
831        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));
832        children.add(new Property("appointmentType", "CodeableConcept", "The style of appointment or patient that may be booked in the slot (not service type).", 0, 1, appointmentType));
833        children.add(new Property("schedule", "Reference(Schedule)", "The schedule resource that this slot defines an interval of status information.", 0, 1, schedule));
834        children.add(new Property("status", "code", "busy | free | busy-unavailable | busy-tentative | entered-in-error.", 0, 1, status));
835        children.add(new Property("start", "instant", "Date/Time that the slot is to begin.", 0, 1, start));
836        children.add(new Property("end", "instant", "Date/Time that the slot is to conclude.", 0, 1, end));
837        children.add(new Property("overbooked", "boolean", "This slot has already been overbooked, appointments are unlikely to be accepted for this time.", 0, 1, overbooked));
838        children.add(new Property("comment", "string", "Comments on the slot to describe any extended information. Such as custom constraints on the slot.", 0, 1, comment));
839      }
840
841      @Override
842      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
843        switch (_hash) {
844        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "External Ids for this item.", 0, java.lang.Integer.MAX_VALUE, identifier);
845        case 1281188563: /*serviceCategory*/  return new Property("serviceCategory", "CodeableConcept", "A broad categorization of the service that is to be performed during this appointment.", 0, java.lang.Integer.MAX_VALUE, serviceCategory);
846        case -1928370289: /*serviceType*/  return new Property("serviceType", "CodeableConcept", "The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource.", 0, java.lang.Integer.MAX_VALUE, serviceType);
847        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);
848        case -1596426375: /*appointmentType*/  return new Property("appointmentType", "CodeableConcept", "The style of appointment or patient that may be booked in the slot (not service type).", 0, 1, appointmentType);
849        case -697920873: /*schedule*/  return new Property("schedule", "Reference(Schedule)", "The schedule resource that this slot defines an interval of status information.", 0, 1, schedule);
850        case -892481550: /*status*/  return new Property("status", "code", "busy | free | busy-unavailable | busy-tentative | entered-in-error.", 0, 1, status);
851        case 109757538: /*start*/  return new Property("start", "instant", "Date/Time that the slot is to begin.", 0, 1, start);
852        case 100571: /*end*/  return new Property("end", "instant", "Date/Time that the slot is to conclude.", 0, 1, end);
853        case 2068545308: /*overbooked*/  return new Property("overbooked", "boolean", "This slot has already been overbooked, appointments are unlikely to be accepted for this time.", 0, 1, overbooked);
854        case 950398559: /*comment*/  return new Property("comment", "string", "Comments on the slot to describe any extended information. Such as custom constraints on the slot.", 0, 1, comment);
855        default: return super.getNamedProperty(_hash, _name, _checkValid);
856        }
857
858      }
859
860      @Override
861      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
862        switch (hash) {
863        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
864        case 1281188563: /*serviceCategory*/ return this.serviceCategory == null ? new Base[0] : this.serviceCategory.toArray(new Base[this.serviceCategory.size()]); // CodeableConcept
865        case -1928370289: /*serviceType*/ return this.serviceType == null ? new Base[0] : this.serviceType.toArray(new Base[this.serviceType.size()]); // CodeableConcept
866        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
867        case -1596426375: /*appointmentType*/ return this.appointmentType == null ? new Base[0] : new Base[] {this.appointmentType}; // CodeableConcept
868        case -697920873: /*schedule*/ return this.schedule == null ? new Base[0] : new Base[] {this.schedule}; // Reference
869        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<SlotStatus>
870        case 109757538: /*start*/ return this.start == null ? new Base[0] : new Base[] {this.start}; // InstantType
871        case 100571: /*end*/ return this.end == null ? new Base[0] : new Base[] {this.end}; // InstantType
872        case 2068545308: /*overbooked*/ return this.overbooked == null ? new Base[0] : new Base[] {this.overbooked}; // BooleanType
873        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
874        default: return super.getProperty(hash, name, checkValid);
875        }
876
877      }
878
879      @Override
880      public Base setProperty(int hash, String name, Base value) throws FHIRException {
881        switch (hash) {
882        case -1618432855: // identifier
883          this.getIdentifier().add(castToIdentifier(value)); // Identifier
884          return value;
885        case 1281188563: // serviceCategory
886          this.getServiceCategory().add(castToCodeableConcept(value)); // CodeableConcept
887          return value;
888        case -1928370289: // serviceType
889          this.getServiceType().add(castToCodeableConcept(value)); // CodeableConcept
890          return value;
891        case -1694759682: // specialty
892          this.getSpecialty().add(castToCodeableConcept(value)); // CodeableConcept
893          return value;
894        case -1596426375: // appointmentType
895          this.appointmentType = castToCodeableConcept(value); // CodeableConcept
896          return value;
897        case -697920873: // schedule
898          this.schedule = castToReference(value); // Reference
899          return value;
900        case -892481550: // status
901          value = new SlotStatusEnumFactory().fromType(castToCode(value));
902          this.status = (Enumeration) value; // Enumeration<SlotStatus>
903          return value;
904        case 109757538: // start
905          this.start = castToInstant(value); // InstantType
906          return value;
907        case 100571: // end
908          this.end = castToInstant(value); // InstantType
909          return value;
910        case 2068545308: // overbooked
911          this.overbooked = castToBoolean(value); // BooleanType
912          return value;
913        case 950398559: // comment
914          this.comment = castToString(value); // StringType
915          return value;
916        default: return super.setProperty(hash, name, value);
917        }
918
919      }
920
921      @Override
922      public Base setProperty(String name, Base value) throws FHIRException {
923        if (name.equals("identifier")) {
924          this.getIdentifier().add(castToIdentifier(value));
925        } else if (name.equals("serviceCategory")) {
926          this.getServiceCategory().add(castToCodeableConcept(value));
927        } else if (name.equals("serviceType")) {
928          this.getServiceType().add(castToCodeableConcept(value));
929        } else if (name.equals("specialty")) {
930          this.getSpecialty().add(castToCodeableConcept(value));
931        } else if (name.equals("appointmentType")) {
932          this.appointmentType = castToCodeableConcept(value); // CodeableConcept
933        } else if (name.equals("schedule")) {
934          this.schedule = castToReference(value); // Reference
935        } else if (name.equals("status")) {
936          value = new SlotStatusEnumFactory().fromType(castToCode(value));
937          this.status = (Enumeration) value; // Enumeration<SlotStatus>
938        } else if (name.equals("start")) {
939          this.start = castToInstant(value); // InstantType
940        } else if (name.equals("end")) {
941          this.end = castToInstant(value); // InstantType
942        } else if (name.equals("overbooked")) {
943          this.overbooked = castToBoolean(value); // BooleanType
944        } else if (name.equals("comment")) {
945          this.comment = castToString(value); // StringType
946        } else
947          return super.setProperty(name, value);
948        return value;
949      }
950
951      @Override
952      public Base makeProperty(int hash, String name) throws FHIRException {
953        switch (hash) {
954        case -1618432855:  return addIdentifier(); 
955        case 1281188563:  return addServiceCategory(); 
956        case -1928370289:  return addServiceType(); 
957        case -1694759682:  return addSpecialty(); 
958        case -1596426375:  return getAppointmentType(); 
959        case -697920873:  return getSchedule(); 
960        case -892481550:  return getStatusElement();
961        case 109757538:  return getStartElement();
962        case 100571:  return getEndElement();
963        case 2068545308:  return getOverbookedElement();
964        case 950398559:  return getCommentElement();
965        default: return super.makeProperty(hash, name);
966        }
967
968      }
969
970      @Override
971      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
972        switch (hash) {
973        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
974        case 1281188563: /*serviceCategory*/ return new String[] {"CodeableConcept"};
975        case -1928370289: /*serviceType*/ return new String[] {"CodeableConcept"};
976        case -1694759682: /*specialty*/ return new String[] {"CodeableConcept"};
977        case -1596426375: /*appointmentType*/ return new String[] {"CodeableConcept"};
978        case -697920873: /*schedule*/ return new String[] {"Reference"};
979        case -892481550: /*status*/ return new String[] {"code"};
980        case 109757538: /*start*/ return new String[] {"instant"};
981        case 100571: /*end*/ return new String[] {"instant"};
982        case 2068545308: /*overbooked*/ return new String[] {"boolean"};
983        case 950398559: /*comment*/ return new String[] {"string"};
984        default: return super.getTypesForProperty(hash, name);
985        }
986
987      }
988
989      @Override
990      public Base addChild(String name) throws FHIRException {
991        if (name.equals("identifier")) {
992          return addIdentifier();
993        }
994        else if (name.equals("serviceCategory")) {
995          return addServiceCategory();
996        }
997        else if (name.equals("serviceType")) {
998          return addServiceType();
999        }
1000        else if (name.equals("specialty")) {
1001          return addSpecialty();
1002        }
1003        else if (name.equals("appointmentType")) {
1004          this.appointmentType = new CodeableConcept();
1005          return this.appointmentType;
1006        }
1007        else if (name.equals("schedule")) {
1008          this.schedule = new Reference();
1009          return this.schedule;
1010        }
1011        else if (name.equals("status")) {
1012          throw new FHIRException("Cannot call addChild on a primitive type Slot.status");
1013        }
1014        else if (name.equals("start")) {
1015          throw new FHIRException("Cannot call addChild on a primitive type Slot.start");
1016        }
1017        else if (name.equals("end")) {
1018          throw new FHIRException("Cannot call addChild on a primitive type Slot.end");
1019        }
1020        else if (name.equals("overbooked")) {
1021          throw new FHIRException("Cannot call addChild on a primitive type Slot.overbooked");
1022        }
1023        else if (name.equals("comment")) {
1024          throw new FHIRException("Cannot call addChild on a primitive type Slot.comment");
1025        }
1026        else
1027          return super.addChild(name);
1028      }
1029
1030  public String fhirType() {
1031    return "Slot";
1032
1033  }
1034
1035      public Slot copy() {
1036        Slot dst = new Slot();
1037        copyValues(dst);
1038        if (identifier != null) {
1039          dst.identifier = new ArrayList<Identifier>();
1040          for (Identifier i : identifier)
1041            dst.identifier.add(i.copy());
1042        };
1043        if (serviceCategory != null) {
1044          dst.serviceCategory = new ArrayList<CodeableConcept>();
1045          for (CodeableConcept i : serviceCategory)
1046            dst.serviceCategory.add(i.copy());
1047        };
1048        if (serviceType != null) {
1049          dst.serviceType = new ArrayList<CodeableConcept>();
1050          for (CodeableConcept i : serviceType)
1051            dst.serviceType.add(i.copy());
1052        };
1053        if (specialty != null) {
1054          dst.specialty = new ArrayList<CodeableConcept>();
1055          for (CodeableConcept i : specialty)
1056            dst.specialty.add(i.copy());
1057        };
1058        dst.appointmentType = appointmentType == null ? null : appointmentType.copy();
1059        dst.schedule = schedule == null ? null : schedule.copy();
1060        dst.status = status == null ? null : status.copy();
1061        dst.start = start == null ? null : start.copy();
1062        dst.end = end == null ? null : end.copy();
1063        dst.overbooked = overbooked == null ? null : overbooked.copy();
1064        dst.comment = comment == null ? null : comment.copy();
1065        return dst;
1066      }
1067
1068      protected Slot typedCopy() {
1069        return copy();
1070      }
1071
1072      @Override
1073      public boolean equalsDeep(Base other_) {
1074        if (!super.equalsDeep(other_))
1075          return false;
1076        if (!(other_ instanceof Slot))
1077          return false;
1078        Slot o = (Slot) other_;
1079        return compareDeep(identifier, o.identifier, true) && compareDeep(serviceCategory, o.serviceCategory, true)
1080           && compareDeep(serviceType, o.serviceType, true) && compareDeep(specialty, o.specialty, true) && compareDeep(appointmentType, o.appointmentType, true)
1081           && compareDeep(schedule, o.schedule, true) && compareDeep(status, o.status, true) && compareDeep(start, o.start, true)
1082           && compareDeep(end, o.end, true) && compareDeep(overbooked, o.overbooked, true) && compareDeep(comment, o.comment, true)
1083          ;
1084      }
1085
1086      @Override
1087      public boolean equalsShallow(Base other_) {
1088        if (!super.equalsShallow(other_))
1089          return false;
1090        if (!(other_ instanceof Slot))
1091          return false;
1092        Slot o = (Slot) other_;
1093        return compareValues(status, o.status, true) && compareValues(start, o.start, true) && compareValues(end, o.end, true)
1094           && compareValues(overbooked, o.overbooked, true) && compareValues(comment, o.comment, true);
1095      }
1096
1097      public boolean isEmpty() {
1098        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, serviceCategory
1099          , serviceType, specialty, appointmentType, schedule, status, start, end, overbooked
1100          , comment);
1101      }
1102
1103  @Override
1104  public ResourceType getResourceType() {
1105    return ResourceType.Slot;
1106   }
1107
1108 /**
1109   * Search parameter: <b>schedule</b>
1110   * <p>
1111   * Description: <b>The Schedule Resource that we are seeking a slot within</b><br>
1112   * Type: <b>reference</b><br>
1113   * Path: <b>Slot.schedule</b><br>
1114   * </p>
1115   */
1116  @SearchParamDefinition(name="schedule", path="Slot.schedule", description="The Schedule Resource that we are seeking a slot within", type="reference", target={Schedule.class } )
1117  public static final String SP_SCHEDULE = "schedule";
1118 /**
1119   * <b>Fluent Client</b> search parameter constant for <b>schedule</b>
1120   * <p>
1121   * Description: <b>The Schedule Resource that we are seeking a slot within</b><br>
1122   * Type: <b>reference</b><br>
1123   * Path: <b>Slot.schedule</b><br>
1124   * </p>
1125   */
1126  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SCHEDULE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SCHEDULE);
1127
1128/**
1129   * Constant for fluent queries to be used to add include statements. Specifies
1130   * the path value of "<b>Slot:schedule</b>".
1131   */
1132  public static final ca.uhn.fhir.model.api.Include INCLUDE_SCHEDULE = new ca.uhn.fhir.model.api.Include("Slot:schedule").toLocked();
1133
1134 /**
1135   * Search parameter: <b>identifier</b>
1136   * <p>
1137   * Description: <b>A Slot Identifier</b><br>
1138   * Type: <b>token</b><br>
1139   * Path: <b>Slot.identifier</b><br>
1140   * </p>
1141   */
1142  @SearchParamDefinition(name="identifier", path="Slot.identifier", description="A Slot Identifier", type="token" )
1143  public static final String SP_IDENTIFIER = "identifier";
1144 /**
1145   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1146   * <p>
1147   * Description: <b>A Slot Identifier</b><br>
1148   * Type: <b>token</b><br>
1149   * Path: <b>Slot.identifier</b><br>
1150   * </p>
1151   */
1152  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1153
1154 /**
1155   * Search parameter: <b>specialty</b>
1156   * <p>
1157   * Description: <b>The specialty of a practitioner that would be required to perform the service requested in this appointment</b><br>
1158   * Type: <b>token</b><br>
1159   * Path: <b>Slot.specialty</b><br>
1160   * </p>
1161   */
1162  @SearchParamDefinition(name="specialty", path="Slot.specialty", description="The specialty of a practitioner that would be required to perform the service requested in this appointment", type="token" )
1163  public static final String SP_SPECIALTY = "specialty";
1164 /**
1165   * <b>Fluent Client</b> search parameter constant for <b>specialty</b>
1166   * <p>
1167   * Description: <b>The specialty of a practitioner that would be required to perform the service requested in this appointment</b><br>
1168   * Type: <b>token</b><br>
1169   * Path: <b>Slot.specialty</b><br>
1170   * </p>
1171   */
1172  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SPECIALTY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SPECIALTY);
1173
1174 /**
1175   * Search parameter: <b>service-category</b>
1176   * <p>
1177   * Description: <b>A broad categorization of the service that is to be performed during this appointment</b><br>
1178   * Type: <b>token</b><br>
1179   * Path: <b>Slot.serviceCategory</b><br>
1180   * </p>
1181   */
1182  @SearchParamDefinition(name="service-category", path="Slot.serviceCategory", description="A broad categorization of the service that is to be performed during this appointment", type="token" )
1183  public static final String SP_SERVICE_CATEGORY = "service-category";
1184 /**
1185   * <b>Fluent Client</b> search parameter constant for <b>service-category</b>
1186   * <p>
1187   * Description: <b>A broad categorization of the service that is to be performed during this appointment</b><br>
1188   * Type: <b>token</b><br>
1189   * Path: <b>Slot.serviceCategory</b><br>
1190   * </p>
1191   */
1192  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SERVICE_CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SERVICE_CATEGORY);
1193
1194 /**
1195   * Search parameter: <b>appointment-type</b>
1196   * <p>
1197   * Description: <b>The style of appointment or patient that may be booked in the slot (not service type)</b><br>
1198   * Type: <b>token</b><br>
1199   * Path: <b>Slot.appointmentType</b><br>
1200   * </p>
1201   */
1202  @SearchParamDefinition(name="appointment-type", path="Slot.appointmentType", description="The style of appointment or patient that may be booked in the slot (not service type)", type="token" )
1203  public static final String SP_APPOINTMENT_TYPE = "appointment-type";
1204 /**
1205   * <b>Fluent Client</b> search parameter constant for <b>appointment-type</b>
1206   * <p>
1207   * Description: <b>The style of appointment or patient that may be booked in the slot (not service type)</b><br>
1208   * Type: <b>token</b><br>
1209   * Path: <b>Slot.appointmentType</b><br>
1210   * </p>
1211   */
1212  public static final ca.uhn.fhir.rest.gclient.TokenClientParam APPOINTMENT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_APPOINTMENT_TYPE);
1213
1214 /**
1215   * Search parameter: <b>service-type</b>
1216   * <p>
1217   * Description: <b>The type of appointments that can be booked into the slot</b><br>
1218   * Type: <b>token</b><br>
1219   * Path: <b>Slot.serviceType</b><br>
1220   * </p>
1221   */
1222  @SearchParamDefinition(name="service-type", path="Slot.serviceType", description="The type of appointments that can be booked into the slot", type="token" )
1223  public static final String SP_SERVICE_TYPE = "service-type";
1224 /**
1225   * <b>Fluent Client</b> search parameter constant for <b>service-type</b>
1226   * <p>
1227   * Description: <b>The type of appointments that can be booked into the slot</b><br>
1228   * Type: <b>token</b><br>
1229   * Path: <b>Slot.serviceType</b><br>
1230   * </p>
1231   */
1232  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SERVICE_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SERVICE_TYPE);
1233
1234 /**
1235   * Search parameter: <b>start</b>
1236   * <p>
1237   * Description: <b>Appointment date/time.</b><br>
1238   * Type: <b>date</b><br>
1239   * Path: <b>Slot.start</b><br>
1240   * </p>
1241   */
1242  @SearchParamDefinition(name="start", path="Slot.start", description="Appointment date/time.", type="date" )
1243  public static final String SP_START = "start";
1244 /**
1245   * <b>Fluent Client</b> search parameter constant for <b>start</b>
1246   * <p>
1247   * Description: <b>Appointment date/time.</b><br>
1248   * Type: <b>date</b><br>
1249   * Path: <b>Slot.start</b><br>
1250   * </p>
1251   */
1252  public static final ca.uhn.fhir.rest.gclient.DateClientParam START = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_START);
1253
1254 /**
1255   * Search parameter: <b>status</b>
1256   * <p>
1257   * Description: <b>The free/busy status of the appointment</b><br>
1258   * Type: <b>token</b><br>
1259   * Path: <b>Slot.status</b><br>
1260   * </p>
1261   */
1262  @SearchParamDefinition(name="status", path="Slot.status", description="The free/busy status of the appointment", type="token" )
1263  public static final String SP_STATUS = "status";
1264 /**
1265   * <b>Fluent Client</b> search parameter constant for <b>status</b>
1266   * <p>
1267   * Description: <b>The free/busy status of the appointment</b><br>
1268   * Type: <b>token</b><br>
1269   * Path: <b>Slot.status</b><br>
1270   * </p>
1271   */
1272  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
1273
1274
1275}
1276