---
title: Поиск свободного времени для записи
summary: Визит записывают через подбор. Он ищет начало, при котором все и всё, что нужно визиту, работают и свободны одновременно, а если такого нет, говорит почему.
tools: [talemo_find_times, talemo_get_calendar]
related: [visits, who-does-what, resource-schedule, booking-rules, services-and-prices]
search: [свободные окна, свободное время, доступность]
---

# Подбор времени

Визит записывают только через подбор (**Календарь → Записать**, или
`talemo_find_times`, а потом `talemo_book_visit`). При записи выбранное начало ещё
раз проверяется по тем же правилам, так что записанный визит всегда такой, какой
предложил бы подбор.

## О чём он спрашивает

- **Для кого** — карточка клиента. Для поиска она необязательна, а с ней
  варианты с тем, кто делал последний визит клиента, идут первыми и помечены «в
  прошлый раз». Для записи есть и **Новый клиент**: имя и номер вместо карточки (см.
  [Визиты](visits.md)); подбор для него идёт без «в прошлый раз»: карточки ещё нет.
- **В одном визите** — одна или несколько услуг. Подбор ищет время сразу на все.
- **Когда** — месяц, где точкой отмечены дни, в которые у подходящих людей, мест и
  аппаратов есть свободное время на весь визит. День без точки — всё занято, серый
  — никто не работает, штриховка — графика нет. Нажмите день — увидите время начала
  по шагу филиала и по часам филиала: Утро (до 12:00), День (с 12:00), Вечер (с
  17:00). **Ближайшее** выбирает сразу и день, и время.
- По желанию — ресурсы, которые нужно взять. **Кто подходит** перечисляет мастеров,
  места и аппараты, которые могут сделать визит. Если ресурс, выбранный в меню сетки,
  услугам визита не подходит, подбор отвечает отказом, а под ним остаётся **Кто
  подходит** по этой роли: у выбранного стоит крестик — нажмите, и подбор пойдёт
  заново без него, или возьмите другого из списка. Отказ называет выбранного и услуги,
  которые у него не отмечены, и подсказывает: если их нужно отметить, это делают в его
  карточке, в «Услуги».

## Что такое вариант

Вариант — это начало, ресурсы, которые его занимают, и две длительности: **Работа**
и **с уборкой**. Начало ложится на шаг записи («Начать можно каждые N минут: так
задано в правилах записи»). Работа должна лежать в открытом времени каждого ресурса
и не пересекаться с другими визитами; уборка последнего ресурса может выйти за край
рабочего дня, и другие визиты её ждут. Прошедшее время не предлагается.

Для каждого, кто нужен визиту, — мастера, места, аппарата — ресурс предлагается, только если он
работает, свободен и отмечен как делающий каждую услугу визита, которой он нужен (см. [Кто что умеет](who-does-what.md)).

## Кому достаётся начало

Когда мастера не назвали, а на это начало свободны несколько, первым идёт мастер
последнего визита клиента («в прошлый раз»), а потом выбирает правило филиала
«Любой мастер»: «Поровну», «Без дыр в графике» или «По списку» (см.
[Правила записи](booking-rules.md)). Названный мастер правилу не подчиняется. Место
и аппарат правилу не подчиняются: берётся менее занятый в этот день, потом по порядку
заведения. Запись на выбранное начало идёт по тому же выбору, поэтому визит
ложится к тому, кого показал подбор. Исход по дням (`days`) от правила не зависит.

## Когда ничего нет

Ответ называет одну из причин, и каждая из них — обычный ответ подбора:

- **Ни у одного мастера не отмечены все эти услуги сразу** — нет мастера, отмеченного на
  все услуги, которым нужен мастер. Свободное время не ищется; уберите услугу или
  отметьте мастера.
- **Ни у одного места (или аппарата) не отмечено: услуги** — у места или аппарата
  `without_fit` называет услуги, которые не отмечены ни у одного из них. Свободное время не ищется;
  отметьте услугу в карточке места или аппарата (см. [Кто что умеет](who-does-what.md)).
- **На эти дни нет графика** — у подходящих ресурсов на эти дни нет ни одного
  дня графика. Пока график не продлён на эти дни, записать никого нельзя (см.
  [График ресурса](resource-schedule.md)).
- **В это время никто не работает** — все, кто подходит, в выходной или в другие
  часы. Время не занято, его просто нет в графиках.
- **В этом окне свободного времени нет** — все, кто подходит, заняты или не
  работают.

В последних двух случаях подбор предлагает и ближайшее свободное время после окна,
если оно есть в ближайшие 90 дней; тот же визит можно записать туда.

## Календарь

`talemo_get_calendar` показывает сетку филиала на срок от одного до семи дней, а
сетка «Календаря» — неделю: ресурсы, их открытое и занятое время по дням, визиты и сколько визитов не закрыто.

## Кто может

Подбор времени — отдельное право; оно есть у роли «Администратор». Роль,
ограниченная «своим», видит только тех мастеров, которыми работает человек.
Онлайн-администратор пользуется тем же подбором для клиента, с которым говорит, и не
видит, какие ресурсы не подошли и почему.

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

- `talemo_find_times` принимает `branch_id` и `service_ids` (ID из `talemo_list_services` в том порядке, в каком услуги делают) и, по желанию: `party_id`, чтобы ресурсы последнего визита клиента шли первыми (`last_time` называет их); окно `from` и `to` (неделя, если не указано, не больше 31 дня) и время дня `after` и `before`; `resource_ids`, когда человек попросил конкретных; `every` — все начала на шаге вместо самого раннего за день у каждого мастера; `limit`; и `visit_id` переносимого визита, чьё собственное время не мешает. В ответе есть `outcome`:
  - `found` — в `variants` начала с ресурсами для каждого нужного — мастера, места, аппарата; у каждого ресурса `service_ids` называет услуги, которые он делает (мастер ведёт все, место и аппарат подбираются каждой услуге отдельно: сначала тот же, что у соседней услуги); `step_minutes` — шаг начал;
  - `none_together` — никто не делает эти услуги вместе; `roles` говорит, кто подходит к мастеру, месту и аппарату, а `without_fit` у места или аппарата называет услуги, на которые не годится ни одно место или аппарат. Уберите услугу или отметьте мастера (см. [Кто что умеет](who-does-what.md));
  - `none_free` — всё занято;
  - `day_off` — в окне никто из подходящих не работает: выходной, другие часы, чем просили, или время уже прошло. Это не занятое время, поэтому его не предлагают: запись туда отклоняется с `visit.outside_schedule`, а если начало прошло, — с `visit.past`;
  - `no_schedule` — у подходящих ресурсов нет графика; сначала заведите или продлите его (см. [График ресурса](resource-schedule.md)).
- Когда окно пусто, `next` — ближайшее время за его пределами в ближайшие 90 дней.
- `days` — исход по каждому дню окна: `date` (день по часам филиала) и `outcome` теми же словами, что выше; от `limit` он не зависит. Чтобы узнать, в какие дни месяца есть место, спросите весь месяц (не больше 31 дня) с `limit` 1 и прочтите `days`: день `found` — свободное время на весь визит есть.
- Без `every` ответ неполон: в нём только самое раннее начало каждого дня у каждого мастера, а более позднее время может быть свободно. Время, которое назвал человек, проверяйте с `every` и с `after` и `before` вокруг него.
- Ресурс из `resource_ids`, который не годится на свою роль, получает отказ `visit.resource_unfit` с `params.role` и `params.resource_id`, как при записи: мастер, который делает не все услуги, место или аппарат, которые не делают ни одной услуги своей роли. Это не `none_together`: назовите другой ресурс или разведите услуги по разным визитам.
- Мастера, которого не назвали в `resource_ids`, подбор выбирает сам: сперва мастер последнего визита `party_id`, потом правило филиала `any_master` (см. `talemo_get_booking_rules`).
- Вариант уходит в `talemo_book_visit` как есть: его `start` и `resource_ids` его ресурсов. Своё начало не составляйте.
- `talemo_get_calendar` показывает сетку филиала на срок от одного до семи дней с графиками, визитами, в том числе отменёнными, и `unclosed_count`. Если человек видит лишь визиты ресурсов, связанных с ним, ответ ещё несёт `own_resource_ids` (см. [Визиты и их статусы](visits.md)).
- Каждый исход — обычный ответ подбора, а не сбой. Скажите человеку, какой это исход и что его изменит.
