# Consultation Booking
Clinics API
## TODO
[Krzyś?]
SlotCalendarRelated:
-> Create new SlotCalendar
-> Rename ServiceCenterRules na `CalendarRules`, rearrange as STI
API-related
-> Make Consultations return current and close-future consultations
-> make upcoming consultation pickable by SPs (3 minutes)
-> if begins_at.future? add validation to prevent too many consultations at one time
-> implement other validations (eg. margin/horizon of 1.hour or 30.minutes)
## MVP
1 patient every 15 minutes
sort consultations by begins_at ASC
greyed out
margin/horizon of 1.hour or 30.minutes
```
CONSULTATION_TIMESLOT_DURATION_MIN = 10
SLOT_DAYS_ADVANCE = 3
CANNOT_BOOK_EARLIER_THAN_MINUTES_FROM_NOW = 30
CLICKABILITY_MARGIN_UPFRONT_MINUTES = 3
then it's pickable
```
waiting time today average
mark_consultations_with_sla
consultation_type : indicate if SLA is at all applicable
mark consultations to differentiate: drop_in from booked
## ideas
2.days advance
- consultationSlots endpoint
- potentially different rules per flow (b2b vs b2c)
- omit certain timeslots
- based of busiest hour
1st bookable hour 8:30
last bookable hour = 21:30
## notificaitons
- 25 hours prior consultation
- 1 hour prior consultation (or 30 min. TBC)
- add argument :begins_at to `createPatientConsultation` optional, defaults to now
scope :pending, -> { where.not(service_provider: nil).where(cancelled_at: nil).where("consultations.responded_at IS NULL", Time.zone.now) }
-> add a condition for (begins_at < Time.zone.now + 30.minutes
-> make it impossible for a doctor to start consultation before `begins_at` (frontend & backend validation)
make a fixed cap on existing overlapping consultation (3 or 5) and observe.
- make sure all BI is relevant to begins_at not created_at
- create a separate tab in Digimed Dashboard to preview future consultations?
- avg waiting time
1. Tak używamy CalendarBase
2. Rule -> Renameujemy, robimy na STI
Rename ServiceCenterRules na `CalendarRules`
-> ServiceCenterRule
-> ConsultationRule