Saltar al contenido principal

Reglas de disponibilidad

Como su nombre indica, las reglas de disponibilidad representan las reglas que definen una cierta disponibilidad. Las reglas de disponibilidad son un concepto aislado e independiente que pueden estar asociadas a cualquier entidad reservable como servicios o recursos.

{
// Duración del evento
"duration": "string",
// Frecuencia de inicio
"step": "string",
// Horarios
"repeatingAvailability": {
"timeZone": "string",
"weekly": {
"[DAY_OF_THE_WEEK]": [
{
"start": "string",
"end": "string"
}
]
}
},
// Máximo de reservas concurrentes
"maxConcurrentBookings": 0,
// Antelación mínima de reserva
"minBookingNotice": "string",
// Antelación máxima de reserva
"maxBookingNotice": "string",
// Margen de tiempo después de la reserva
"beforeBuffer": "string",
// Margen de tiempo antes de la reserva
"afterBuffer": "string",
// Permite conectar calendarios externos y crear o comprobar la disponibilidad en ellos...
"thirdPartyCalendars": {},
// Permite configurar manualmente intervalos donde no se ofrecerá disponibilidad...
"busyIntervals": [],
}

Reglas básicas

Duración (duration)

El campo duración permite configurar la duración del evento en horas y minutos. La duración esta especificada en fomato estandar ISO9601

Ejemplos:

  • Un intervalo de una hora: PT1H
  • Un intervalo de una hora y 30 minutos: PT1H30M
  • Un intervalo de 20 minutos: PT20M

Frecuencia de inicio (step)

Independientemente de la duración de los servicios, podemos querer que estos empiecen a una hora determinada.

El campo Step permite configurar cada cuanto tiempo se generan huecos en los que se puede reservar el evento.

Ejemplo: Duración 1h Frecuencia 30m

{
duration: 'PT1H',
step: 'PT30M',
}

Si creamos un evento de 1h con una step de 30m se generarán los siguientes huecos:

  • 09:00 - 10:00
  • 09:30 - 10:30
  • 10:00 - 11:00
  • 10:30 - 11:30

Ejemplo: Duración 1h Frecuencia 20m

{
duration: 'PT1H',
step: 'PT20M',
}

Si creamos un evento de 1h con una step de 20m se generarán los siguientes huecos:

  • 09:00 - 10:00
  • 09:20 - 10:20
  • 09:40 - 10:40
  • 10:00 - 11:00
  • 10:20 - 11:20
  • 10:40 - 11:40

Horarios (repeatingAvailability)

note

El campo repeatingAvailability será reemplazado por el campo schedule en siguientes versiones de la API.

Permite configurar las horas en las que se generarán los huecos de forma habitual.

El objeto horarios consta de dos propiedades principales, la zona horaria y la periodicidad semanal.

Ejemplo: Dias laborables de 09:00 a 18:00

{
timeZone: 'Europe/Madrid',
weekly: {
SUNDAY: [],
MONDAY: [{ start: '09:00', end: '18:00' }],
TUESDAY: [{ start: '09:00', end: '18:00' }],
WEDNESDAY: [{ start: '09:00', end: '18:00' }],
THURSDAY: [{ start: '09:00', end: '18:00' }],
FRIDAY: [{ start: '09:00', end: '18:00' }],
SATURDAY: [],
}
}

Para especificar parones, por ejemplo el correspondiente a la hora de la comída es suficiente con añadir otro intervalo al dia correspondiente.

Ejemplo: Días laborables de 09:00 a 14:00 y de 16:00 a 18:00

{
timeZone: 'Europe/Madrid',
weekly: {
SUNDAY: [],
MONDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
TUESDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
WEDNESDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
THURSDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
FRIDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
SATURDAY: [],
}
}

Reglas avanzadas

Márgenes de tiempo entre reservas

En ocasiones queremos bloquear un espacio de tiempo antes y después de los eventos. Un ejemplo es un médico que quiere tener 10 minutos antes de cada cita para leer con calma los datos del paciente o una clínica de estética que tiene que desinfectar las cabinas después de cada sesión.

  • beforeBuffer: Permite especificar un margen de tiempo antes de los eventos en formato duration.
  • afterBuffer Permiten especificar este margen de tiempo después de los eventos en formato duration.

Ejemplo: Un servicio que tiene que tener 10 minutos antes y 20 minutos después de cada cita.

{
// 10 minutos antes
beforeBuffer: "PT10M",
// 20 minutos después.
afterBuffer: "PT20M",
}

Antelación mínima y máxima

Esta opción permite restringir con cuanta antelación se puede reservar un servicio.

Ejemplo: Un servicio que se tiene que reservar con 24h de antelación y máximo en los próximos 7 dias

{
// El servicio se tiene que reservar con 24h de antelación
minBookingNotice: "PT24H",
// El servicio se tiene que reservar máximo en los próximos 7 dias
maxBookingNotice: "PT7D",
}

Cuando esta opción esté habilitada no se permitirán reservas fuera del rango de tiempo especificado. Esto es útil para evitar reservas de última hora o con demasiado adelanto.

Número máximo de reservas por hueco

Permite configurar el número máximo de reservas que se pueden hacer en cada hueco disponible.

Ejemplo: Un psicólogo que sólo puede atender a un paciente a la vez:

{
// Se permiten 1 reserva concurrente por hueco.
"maxConcurrentBookings": 1,
}

Ejemplo: Una clase de spinning con 10 bicicletas:

{
// Se permiten 10 reservas concurrentes por hueco.
"maxConcurrentBookings": 10,
}

Límite de reservas por unidad de tiempo. (maxBookingsPerTimeUnit)

Permite configurar el número máximo de reservas que se pueden hacer en un periodo determinado de tiempo. Contiene un array de límites formado por los siguientes campos:

  • perHour: Número máximo de reservas por hora.
  • perDay: Número máximo de reservas por día natural.
  • perWeek: Número máximo de reservas por semana natural.
  • perMonth: Número máximo de reservas por mes natural.
Importante

Se considera que un evento pertenece al periodo si su fecha de inicio o su fecha de fin estám dentro del periodo. Los periodos de tiempo se calculan conforme a la zona horaria especificada en el campo TimeZone del servicio. Si este campo no está configurado se utiliza UTC.

Ejemplo: Un servicio que permite hacer un máximo de 10 reservas por hora:

maxBookingsPerTimeUnit: {
perHour: 10,
}

Ejemplo: Máximo 3 reservas al día, 15 a la semana o 30 al mes.

{
maxBookingsPerTimeUnit: {
perDay: 3,
perWeek: 15,
perMonth: 30,
}
}

Unidades

En cierto tipo de reservas el campo maxConcurrentBookings no es suficiente si queremos representar situaciones donde en cada reserva se pueden especificar un número variable de objetos reservables.

Ejemplo: Un espectáculo que tiene 100 plazas y por cada reserva se pueden reservar mínimo 1 plaza y máximo 5:

{
// Número total de unidades reservables por hueco
"availableUnits": 100,
// Numero mínimo de unidades que hay que bloquear en cada reserva
"minUnitsPerBooking": 1,
// Número máximo de unidades que se pueden bloquear por cada reserva
"maxUnitsPerBooking": 5,
}

Ejemplo: Una clase de surf con grupos de entre 5 y 20 personas por monitor:

{
// Número total de unidades reservables por hueco
"availableUnits": 20,
// Numero mínimo de unidades que hay que bloquear en cada reserva
"minUnitsPerBooking": 5,
// Número máximo de unidades que se pueden bloquear por cada reserva
"maxUnitsPerBooking": 20,
}