> ## Documentation Index
> Fetch the complete documentation index at: https://omniloy.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Scheduling

> Call cadence, retries, time windows, holidays, and bulk upload

Scheduling defines **when** OlivIA calls. It is configured at the protocol level (`freq_config`) and can be adjusted per enrollment.

## Cadence configuration (freq\_config)

<img src="https://mintcdn.com/omniloy/Q9jZm4-SeFtgd8-M/images/olivia/scheduling.png?fit=max&auto=format&n=Q9jZm4-SeFtgd8-M&q=85&s=ea28b8320f3a35fb62ffa26ab46139f3" alt="Scheduling panel" width="1687" height="1423" data-path="images/olivia/scheduling.png" />

| Field                     | What it defines                                                                              |
| ------------------------- | -------------------------------------------------------------------------------------------- |
| `start_date` / `end_date` | Follow-up date range (`end_date` optional).                                                  |
| `frequency`               | Base cadence: every N `days`, `weeks`, or `months`.                                          |
| `retry_window`            | Retry window: every N `minutes`, `hours`, or `days`.                                         |
| `max_retries`             | Maximum retries per questionnaire.                                                           |
| `max_instances`           | Maximum number of questionnaires (or unlimited).                                             |
| `timezone`                | Time zone (IANA) that governs the windows.                                                   |
| Time windows              | Allowed slots: **inline slots** (with allowed weekdays) **or** reusable **window profiles**. |

Retries respect the allowed slots and days and stop past the end date. When a questionnaire closes, a score band can automatically adjust the next call's cadence (`freq_override`).

## Per-enrollment override

When enrolling a patient you can send a partial configuration that overlays the protocol's (for example, a different cadence or time zone). See [Follow-up (API)](/olivia/en/api/seguimiento).

## Window profiles

Reusable time slots at the organization level: a name, a weekday mask, and a list of slots. Editing a profile can propagate the change to the protocols and enrollments that use it.

## Holiday calendar

Days (or ranges) when no calls are made. They can apply to the whole organization or be scoped to specific protocols. Each organization evaluates "today" in its own time zone; calls that fall on a closed day are skipped.

## Bulk upload

<img src="https://mintcdn.com/omniloy/Q9jZm4-SeFtgd8-M/images/olivia/bulk-upload.png?fit=max&auto=format&n=Q9jZm4-SeFtgd8-M&q=85&s=490e647768562616a03a07e49cd5afb5" alt="Bulk patient upload via CSV" width="1687" height="1080" data-path="images/olivia/bulk-upload.png" />

To enroll many patients at once you upload a **CSV** (up to 10 MB), with an optional scheduling configuration (otherwise the active version's is used).

* Required columns: `external_id`, `phone`, `language`.
* Optional: `first_name`, `last_name`, `preferred_timezone`, `started_at`.
* Two-phase process: **dry run** (marks each row as valid, duplicate, or error) and then **commit**.
