Sequenced Availability ALPHA

Scheduling a simple set of events is simply a case of making a sequence with the steps defined in the desired order.

For example scheduling 3 sequential events of 30 minutes each for a given account:

[
    {
      "sequence_id":"First Event",
      "ordinal":1,
      "participants":[{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration":{ "minutes": 30 }
    },
    {
      "sequence_id":"Second Event",
      "ordinal":2,
      "participants":[{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration":{ "minutes": 30 }
    }
]

The scheduling engine will determine a number of possible times this sequence of events can occur in.

For example it may be possible to schedule the events with each starting as the previous has finished.

9 First Event
 Second Event
10Busy Period 
 

Or it may be required that we schedule around an existing event in order to fit the events into the available period.

9  
 First Event
10Busy Period 
 
11 Second Event
  

Buffers

In addition to creating a sequence we can also define a buffer time between each step of the sequence, for example before and after each step 30 minutes.

A request creating 2 events with buffer formed like so:

[
    {
      "sequence_id":"First Event",
      "ordinal":1,
      "participants":[{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration":{ "minutes": 30 },
      "buffer":{
        "before": { "minutes" : 30 },
        "after": { "minutes" : 30 }
      }
    },
    {
      "sequence_id":"Second Event",
      "ordinal":2,
      "participants":[{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration":{ "minutes": 30 },
      "buffer":{
        "before": { "minutes" : 30 },
        "after": { "minutes" : 30 }
      }
    }
]

Its important to note that although both the first and second steps have before and after buffers these are collaped into one when the events are sequential.

9Before buffer 
First Event 
10After bufferBefore buffer
 Second Event
11 After buffer
  

However if the events are separated by a busy period both buffers will still be honoured.

9 Before buffer
 First Event
10 After buffer
Busy Period 
11 Before buffer
 Second Event
12 After buffer
  

Maximum buffer

We can also define buffers which have a maximum value associated with them, this is useful when generating a sequence to constain the total time a sequence can occupy.

For example defining a buffer with a minimum of 30 minutes and a maximum of 60 will allow a buffer of between 30 and 60 minutes between each sequence step

We can change our previous example to add in this constaint:

[
    {
      "sequence_id": "First Event",
      "ordinal": 1,
      "participants": [{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration": { "minutes": 30 },
      "buffer": {
        "after": {
          "maximum": { "minutes" : 60 }
        }
      }
    },
    {
      "sequence_id": "Second Event",
      "ordinal": 2,
      "participants": [{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration": { "minutes": 30 }
    }
]

This request means it is possible to generate a sequence with a 30 minute busy period in between as this is within the maximum buffer.

9First Event
Busy Period
10Second Event
 

However if the busy period is longer than 30 minutes we will exceed the maximum buffer so the following example is not valid as the maximum buffer will be exceeded.

9First Event
Busy Period
10
11Second Event
 

Start Intervals

Start intervals can also be used in a sequencing request, these are applied at each step to define when the step can start.

For example if two 30 minute steps have a 60 minute start interval this will create a minimum of a 30 minute gap between the events

[
    {
      "sequence_id": "First Event",
      "ordinal": 1,
      "participants": [{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration": { "minutes": 30 },
      "start_interval": { "minutes": 60 }
    },
    {
      "sequence_id": "Second Event",
      "ordinal": 2,
      "participants": [{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration": { "minutes": 30 },
      "start_interval": { "minutes": 60 }
    }
]

Without a specifed start interval specified the sequence could be scheduled every 30 minutes.

9First Event
Second Event
10 
 

However adding a start interval of 60 minutes would mean a 30 minute gap is created between the steps.

9First Event
 
10Second Event
 

Ordering

In the previous example we specified an order for events by setting the ordinial value for each step, this value is optional and if omitted the ordinal is derived from position in the the array.

We also support the ability to specify a non-determined ordering of a sequence by which we mean the events can occur in any order. We also allow this to be defined partially along with ordered events to define a soft ordering.

For example an interview sequence where we must have an introduction first but the Face to Face and Coding Exercise can occur in any order.

[
    {
      "sequence_id":"Introduction",
      "ordinal":1,
      "participants":[{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration":{ "minutes": 30 }
    },
    {
      "sequence_id":"Face to Face",
      "ordinal":2,
      "participants":[{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration":{ "minutes": 30 }
    },
    {
      "sequence_id":"Coding Exercise",
      "ordinal":2,
      "participants":[{
          "members":[{ "sub":"acc_567236000909002" }],
          "required":"all"
      }],
      "required_duration":{ "minutes": 30 }
    }
]

There are two possible orders this sequence can be generated in, the sequencing engine will consider each option to determine the best possible selection.

9Introduction
Face to Face
10Coding Execise
 
9Introduction
Coding Execise
10Face to Face
 
Search