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