---
title: График ресурса
summary: У филиала нет часов работы. Время открывает график каждого ресурса — обычный график, продлённый до даты, дни, изменённые вручную, и отрезки открытого или занятого времени.
tools: [talemo_get_schedule, talemo_list_schedules, talemo_set_usual_schedule, talemo_apply_usual_schedule, talemo_set_schedule_day, talemo_add_schedule_time, talemo_remove_schedule_time]
related: [resources, visits, finding-times, booking-rules]
search: [график работы, расписание, смены, выходные мастера]
---

# График ресурса

У филиала нет часов работы. У каждого ресурса (см. [Ресурсы](resources.md))
свой график, и визит записывают только в открытое время. День без открытого
времени — выходной.

День состоит из отрезков двух видов: **открыто** (открыто для записи) и **занято**
(занято без записи, с **пометкой**: обед, учёба; до 60 знаков). Открытый отрезок,
который касается другого открытого или пересекается с ним, сливается с ним. Занятое
поверх занятого с другой пометкой не принимается.

## Обычный график

Обычный график — как ресурс обычно работает: сколько дней повторяется и что в каждом
из них. Обычная неделя — это повтор каждые 7 дней. График ресурса лежит в его
карточке, в разделе **«Мастера, места и аппараты»**: в блоке **График** человек
нажимает **Завести график** (потом **Изменить**), и открывается окно «Обычный
график»:

- **Действует с** (сегодня, пока не изменили) и **До**;
- **Повторяется каждые**; у цикла не в 7 дней — ещё выбор, каким по счёту днём
  цикла стоит дата «Действует с» («{дата} — это 1-й день · работает»); у обычной
  недели его нет, день недели виден по дате;
- отрезки каждого дня (**День 1**, **День 2** и так далее).

**Скопировать с…** берёт их у другого ресурса филиала. Какие графики заканчиваются
в ближайшие 14 дней или не заведены совсем, показывает пункт **График
заканчивается** панели раздела: у каждого в списке видно, до какого дня график,
а продлевают его в карточке.

Записать можно только до даты в поле **До**: дни графика появляются сразу до неё, не
дальше чем на год вперёд. **Показать, что изменится** перечисляет меняющиеся дни,
пока ничего не сохранено. Прошлые дни не меняются, а дни, изменённые вручную,
остаются как есть, если в просмотре не отметить их для перезаписи.

**Продлить график** продлевает график до новой даты по тому же обычному графику,
для этого он должен быть задан. График показывает последний день, до которого
он продлён, и после него записать никого нельзя.

## День и отрезок

- Нажмите на день в неделе карточки: окно дня меняет день целиком, в том числе
  прошедший. День становится «изменён вручную», и новый обычный
  график его не трогает, пока его не отметят. **Сделать выходным** очищает день сразу,
  без второго окна, а в уведомлении остаётся **Отменить**.
- **Добавить отрезок** и **Убрать** работают с одним отрезком; в сетке «Календаря» есть
  **Открыть время** и **Занять без записи**.

Время из-под визита не забирают. Правка, после которой записанный или подтверждённый
визит оказался бы вне открытого времени, не принимается, и называется число таких
визитов; сначала их переносят или отменяют. Состоявшийся визит оставляет своё время
открытым: оно отработано.

## Перевод часов и часовой пояс

Обычный график записан в местном времени филиала. Когда часы переводят вперёд, времени,
которого нет, не бывает: край отрезка встаёт на момент перевода, а отрезок целиком
внутри провала отбрасывается. Когда часы переводят назад, повторившееся время
берётся в первый раз. День перевода длится 23 или 25 часов.

Когда меняется часовой пояс филиала, отрезки с сегодняшнего дня сохраняют то же
местное время в новом поясе, а прошлое не сдвигается. Пока визиты впереди выпали бы
из графиков, пояс не меняется. У отключённого ресурса график впереди уходит.

## Кто может

Графики — право уровня филиала у роли «Администратор»; роль «Бухгалтер» их не
видит. Роль, ограниченная «своим», видит и меняет только график ресурса, которым
работает человек.

## Инструменты и отказы

- `talemo_get_schedule` читает один ресурс за период: каждый день — `working`, `day_off` (открытого времени нет) или `not_scheduled` (графика нет, записать нельзя), с открытым и занятым временем и пометками, отметкой «изменён руками», обычным графиком и днём, до которого он продлён. `talemo_list_schedules` читает все ресурсы филиала и показывает, до какого дня продлён каждый график.
- Обычный график и день задают по часам на стене филиала, например `10:00`; одиночное время — момент по RFC 3339. Промежутки полуоткрытые: время до 10:00 не пересекается со временем с 10:00.
- `talemo_set_usual_schedule` задаёт обычный график (`cycle_days`, неделя — 7, с `times` и, только когда нужно, `anchor_day`) и продлевает его от `effective_from` до `until`, не дальше чем на год вперёд. Для недели `anchor_day` не называют: день 1 в `times` тогда понедельник, день 7 — воскресенье, и «вторник–суббота» — дни 2–6; названный `anchor_day` — первый день цикла, и все дни сдвигаются вместе с ним, а у цикла не в неделю без него первый день — день начала. С первым графиком места в филиале все услуги филиала начинают требовать место (см. [«Услуги, цены и валюта»](services-and-prices.md)). Без обоих полей график начинается сегодня и идёт на год вперёд: мастер, которого настраивают по просьбе без начала, работает с сегодняшнего дня, а поздний `effective_from` нужен, только когда человек сам попросил график позже, потому что дни до начала остаются без графика и на них записать нельзя. Дни, изменённые руками, остаются, если не названы в `overwrite`, а прошлые дни не меняются. `talemo_apply_usual_schedule` двигает последний день графика: позже — продлевает обычный график до него, раньше — убирает дни графика после него. Без обычного графика вызов отклоняется со статусом 409 и кодом `schedule.no_cycle`.
- В календаре ресурс, график которого роли не виден, приходит с пустым (null) `days`, а не с днями `not_scheduled`: это «график не виден», и о том, есть ли график, он ничего не говорит.
- Обычный график сам не продлевается. После последнего дня графика у ресурса нет графика, и записать на него нельзя, поэтому назовите человеку дату.
- `talemo_set_schedule_day` задаёт один день целиком, прошедший тоже: все его открытые и занятые отрезки, а без отрезков день — выходной. День становится изменённым руками, и новый обычный график его не трогает.
- `talemo_add_schedule_time` добавляет открытое время или занятое с `note`; открытое сливается с открытым, которого касается. `talemo_remove_schedule_time` убирает отрезок по `time_id`. Занятое поверх занятого с другой пометкой отклоняется со статусом 409 и кодом `schedule.overlap`.
- Время нельзя забрать из-под визита. Изменение, после которого записанный или подтверждённый визит окажется вне открытого времени, отклоняется со статусом 409 и кодом `schedule.has_bookings`; `params.count` — записанные и подтверждённые визиты, `params.done` — состоявшиеся. Первые переносят или отменяют; время состоявшихся остаётся открытым. `dry_run` показывает дни, которые изменятся, и эти записи.
- Инструменты, меняющие много сразу (`talemo_set_usual_schedule`, `talemo_apply_usual_schedule`), вызывают сначала с `dry_run`, а настоящий вызов — когда человек это увидел и сказал «да».
- Запись на неоткрытое время — одно движение: откройте время через `talemo_add_schedule_time`, найдите и запишите; если запись отклонили, уберите добавленное время.
