BRD Mobile 2.4.1 Выбор таймслотов

Направление работ: Mobile

Код раздела: 2.4.1

Раздел: Поиск > Информация о площадке/услуге > Выбор таймслотов

Статус: черновик

Ответственный: Панкова Л.А.

Версия: 0.1

Обновлено: 20.07.26


1. Назначение

Раздел описывает экран мобильного приложения, на котором пользователь выбирает удобное время для бронирования площадки.

Экран открывается после просмотра информации о площадке или услуге только в том случае, если время не было выбрано на шаге Mobile 2.2 “Параметры поиска”. Если пользователь уже выбрал время на шаге 2.2, сценарий 2.4.1 пропускается и пользователь продолжает оформление заказа на шаге Mobile 2.5 “Дополнительные позиции к заказу”.

2. Ключевые понятия

Выбор таймслотов — сценарий выбора времени бронирования площадки перед переходом к дополнениям заказа.

Таймслот — доступный или недоступный для выбора промежуток времени с указанной стоимостью бронирования.

Правило отмены — условие, определяющее доступный срок отмены заказа без начисления сбора.

3. Scope

Входит

S1: Выбор таймслотов и переход к следующему шагу

S2: Сценарии выбора таймслотов

S3: Состояние загрузки

Не входит

4. BR

Указаны в пункте 4 разделов Back 2.2 Площадки партнеров, Back 2.4.1 Условия создания, Back 2.4.3 Правила отмены, Back 2.6 Цены, Back 2.7 Скидки и Back 8.2.1 Сферы и Опции.

5. Функциональные требования (UC + FR)

IDСценарийФункциональное требованиеBRВесСтатус
S1: FR2.4.1-1Пользователь переходит от информации о площадке или услуге к выбору времени.Если время не было выбрано на шаге Mobile 2.2 “Параметры поиска”, интерфейс открывает экран “Выберите время”, отображает заголовок “Выберите время” и действие возврата к разделу услуге”.

Если время уже выбрано, интерфейс пропускает экран 2.4.1 и открывает Mobile 2.5 “Дополнительные позиции к заказу”.
1Частично
OQ2.4.1-1
S1: FR2.4.1-3Пользователь просматривает и выбирает площадку.Интерфейс отображает горизонтальный список доступных площадок и позволяет прокручивать его по горизонтали.

Карточка содержит изображение, название площадки, название объекта и ближайшую станцию метро.

Выбранная площадка отмечена отдельно, остальные доступны для выбора. После выбора интерфейс показывает таймслоты выбранной площадки.
1Частично
OQ2.4.1-2
S1: FR2.4.1-4Пользователь просматривает или меняет опции заказа.Интерфейс отображает набор опций согласно настройкам выбранной сферы: “Кол-во человек”, “Вид работ” или оба поля. По нажатию на опцию интерфейс открывает Mobile 2.2 “Параметры поиска” для изменения значения.1Частично
OQ2.4.1-3
S1: FR2.4.1-5Пользователь просматривает доступное время.Интерфейс группирует таймслоты по датам. Для каждой группы интерфейс отображает день недели, число и месяц.

Интерфейс отображает действие “Следующая неделя”. По этому действию интерфейс подгружает даты и таймслоты следующей недели.
1Реализовано
OQ2.4.1-9
S1: FR2.4.1-6Пользователь просматривает таймслоты выбранной даты.Интерфейс отображает для каждого таймслота время или временной диапазон и стоимость.

Недоступные таймслоты остаются видимыми, но заблокированы для выбора.

Если из таймслота нельзя сформировать последовательный период минимальной длительности, такой таймслот также недоступен для выбора.
1Частично
OQ2.4.1-4
S1: FR2.4.1-7Пользователь просматривает таймслот со скидкой или промо-маркером.Если применима скидка, интерфейс показывает текущую и предыдущую стоимость таймслота. Промо-маркер обозначает горящее предложение.2Частично
OQ2.4.1-4
S1: FR2.4.1-8Пользователь выбрал таймслот.Интерфейс отображает панель выбранного времени с условием отмены, стоимостью следующего доступного часа, итоговой стоимостью выбранных таймслотов и действиями “Очистить” и “Продолжить”.1Частично
OQ2.4.1-5
S1: FR2.4.1-9Пользователь еще не сформировал допустимый выбор времени.Действие “Продолжить” недоступно, пока не выбран хотя бы один таймслот или выбранная последовательность не соответствует минимальной длительности бронирования.1Реализовано
OQ2.4.1-9
S2: FR2.4.1-15Выбранный период короче минимальной длительности бронирования.Интерфейс отображает сообщение “Бронирование возможно только от N ч” и оставляет действие “Продолжить” недоступным, пока пользователь не добавит последовательные таймслоты до допустимой длительности.1Не реализовано
OQ2.4.1-6
S1: FR2.4.1-10Пользователь сформировал допустимый выбор времени и нажимает “Продолжить”.Интерфейс открывает Mobile 2.5 “Дополнительные позиции к заказу” с выбранным периодом бронирования.1Частично
OQ2.4.1-7
S2: FR2.4.1-11Пользователь выбирает первый доступный таймслот.Интерфейс отмечает выбранный таймслот, оставляет доступным для добавления следующий последовательный таймслот и блокирует остальные таймслоты, которые не могут продолжить выбранный период.1Реализовано
OQ2.4.1-10
S2: FR2.4.1-12Пользователь добавляет следующий последовательный таймслот.Интерфейс расширяет выбранный период, суммирует стоимость выбранных таймслотов и обновляет стоимость следующего доступного часа. Пользователь может последовательно добавить несколько таймслотов.1Реализовано
OQ2.4.1-10
S2: FR2.4.1-13Пользователь пытается выбрать недоступный или непоследовательный таймслот.Интерфейс не позволяет добавить заблокированный таймслот к выбранному периоду.1Реализовано
OQ2.4.1-10
S2: FR2.4.1-14Пользователь нажимает “Очистить”.Интерфейс сбрасывает выбранные таймслоты и итоговую стоимость, возвращает исходные состояния доступности таймслотов и делает действие “Продолжить” недоступным.1Реализовано
OQ2.4.1-10
S2: FR2.4.1-16Для выбранного периода доступна бесплатная отмена.Интерфейс отображает сообщение “Бесплатная отмена доступна до HH:MM ДД.ММ.ГГГГ” с дедлайном бесплатной отмены.2Не реализовано
OQ2.4.1-5
S2: FR2.4.1-17Для выбранного периода бесплатная отмена недоступна.Интерфейс отображает сообщение “Бесплатная отмена недоступна”.2Не реализовано
OQ2.4.1-5
S3: FR2.4.1-18Данные площадок и таймслотов загружаются.Интерфейс сохраняет заголовок “Выберите время” и действие возврата, а вместо карточек площадок, дат и таймслотов отображает skeleton-состояние. Выбор таймслотов и переход к следующему шагу недоступны до завершения загрузки.2Реализовано
OQ2.4.1-9

6. Открытые вопросы

Сверка с кодом: BRD 2.4.1 v0.1 · репозиторий booking.mobile.flutter · commit 89ca502 / dev · 26.07.26 · якорь lib/src/feature/time_widget Сводка: 10 вопросов (Open 8 · Подтверждено 2) Маршрутизация без сверки с гайдбуком (гайдбук не передавался).

IDИсточникВопросКомуСтатусРекомендацииИтоговое решение
OQ2.4.1-1Код FR2.4.1-1Требование говорит: экран выбора времени открывается, если время не было выбрано на шаге «Параметры поиска», а если время уже выбрано — экран пропускается. В коде ветка выбирается по тому, задана ли дата, а не по признаку «Пропустить» — подробно это разобрано в OQ2.4-2 соседнего раздела. Здесь же добавляется вторая половина той же проблемы: идентификатор опции, с которым открывается экран, подставляется константой — и в вызывающем экране, и внутри самого экрана времени, если опция пришла пустой. Константа одна и та же в обоих местах. \ time_slot_bloc.dart:37-39 (подстановка константы), room_details_screen.dart:1139 (та же константа при переходе); заголовок «Выберите время» и возврат — time_widget_screen.dart:707РазработкаOpenРешается вместе с OQ2.4-2 — заводить отдельный тикет не нужно, но в тот тикет стоит добавить и подстановку константы в блоке таймслотов: если чинить только вызывающий экран, второй источник константы останется. Проверять на стенде нужно сценарий «пользователь выбрал опцию, отличную от подставляемой».Не баг.
OQ2.4.1-2Код FR2.4.1-3Требование говорит: экран показывает горизонтальный список доступных площадок (изображение, название площадки, объект, ближайшее метро), выбранная отмечена, выбор другой площадки перезагружает её таймслоты. В коде компонент списка написан и умеет всё перечисленное, но данных он не получает: при загрузке экрана список площадок передаётся пустым с авторским комментарием «пусто для простоты». Все последующие обновления состояния переносят этот же пустой список дальше. Практически: горизонтального списка площадок пользователь не увидит никогда, и переключиться на соседнюю площадку с этого экрана нельзя. Рядом в том же месте кода жёстко задан идентификатор сферы, причём значение не является корректным идентификатором — в нём есть символы, недопустимые в UUID. \ time_slot_bloc.dart:90 (пустой список и комментарий), :88 (идентификатор сферы), :137, :190, :243 (перенос пустого списка); компонент — time_widget_screen.dart:1009-1030, использование — :839 и :937-940РазработкаOpenЗавести тикет в Bitrix: загружать список площадок объекта и передавать его в состояние экрана; заодно убрать жёстко заданный идентификатор сферы или заменить его реальным значением из параметров поиска. Продуктового выбора нет — требование веса 1 не работает целиком. Первым шагом стоит уточнить у разработки, есть ли готовый метод получения площадок объекта: на экране информации о площадке такой список уже используется.Вопрос к бизнесу. Нужен ли этот переключатель сверху? (Для него ничего не готов по бекенд части)
OQ2.4.1-3Код FR2.4.1-4Требование говорит: экран показывает опции по настройкам сферы — «Кол-во человек», «Вид работ» или оба поля, — а нажатие открывает «Параметры поиска» для изменения значения. В коде есть только «Кол-во человек»: поле выводится и открывает собственную шторку выбора значения прямо на экране. «Вид работ» отсутствует — соответствующий код закомментирован. Перехода в раздел «Параметры поиска» нет, значение меняется на месте. Зависимости от настроек сферы (какие поля показывать) в коде не видно. \ time_widget_screen.dart:1776-1825 («Кол-во человек» и шторка), :1155-1236 (закомментированный блок)БизнесOpen(А) Подтвердить требование — тогда доработка: добавить «Вид работ» и выбирать состав полей по настройкам сферы; вопрос про переход в «Параметры поиска» решить отдельно — менять значение на месте удобнее, чем уходить на другой экран, и, возможно, стоит поправить формулировку FR2.4.1-4 под текущее поведение. (Б) Если «Вид работ» на этом шаге не нужен — убрать его из требования и удалить закомментированный код. Ответ желательно получить вместе с Mobile 2.2.менять значение на месте удобнее, чем уходить на другой экран, стоит поправить формулировку FR2.4.1-4 под текущее поведение
OQ2.4.1-4Код FR2.4.1-6, FR2.4.1-7Требование говорит: для каждого таймслота отображается время или диапазон и стоимость, а при действующей скидке — текущая и предыдущая стоимость. В коде в плашке таймслота выводится только время: стоимости нет ни в обычном состоянии, ни в состоянии со скидкой, хотя данные для этого есть — модель таймслота содержит и итоговую цену, и цену до скидки, и признак акции. Из требования FR2.4.1-7 реализован только промо-маркер: при скидке в правом верхнем углу плашки появляется значок огня. \ time_widget_screen.dart:1333-1339 (в плашке только время), :1343-1352 (значок огня), time_slot.dart (в модели есть priceFinal, priceBefore, isAction)БизнесOpen(А) Подтвердить требование (рекоменд.): показывать стоимость в плашке таймслота — данные уже приходят, работа сводится к вёрстке; при этом нужно решить, как разместить две цены (текущую и зачёркнутую) в плашке шириной с время — возможно, показывать цену до скидки только в панели выбранного времени. (Б) Если решено, что цены в плашках перегружают экран, — переписать FR2.4.1-6 и FR2.4.1-7 под фактическое поведение (время + маркер акции). Вопрос стоит закрыть до правок: он определяет, сколько информации помещается в сетку слотов.Цены в плашках уже отображаются, тут бред написан
OQ2.4.1-5Код FR2.4.1-8, FR2.4.1-16, FR2.4.1-17Требование говорит: панель выбранного времени содержит условие отмены, стоимость следующего доступного часа, итоговую стоимость и действия «Очистить» и «Продолжить»; при доступной бесплатной отмене показывается «Бесплатная отмена доступна до ЧЧ:ММ ДД.ММ.ГГГГ», иначе — «Бесплатная отмена недоступна». В коде в панели есть итоговая стоимость («Итого:»), «Очистить» и кнопка перехода. Про отмену не выводится ничего: ни одной из двух формулировок в разделе таймслотов нет, поля с дедлайном бесплатной отмены в модели таймслота тоже нет. Стоимость следующего доступного часа отдельной строкой не выводится. \ time_widget_screen.dart:1596 («Итого:»), :1624 («Очистить»), :1638-1646 (кнопка перехода); упоминаний отмены в разделе нетБизнесOpenПравила бесплатной отмены описаны в Back 2.4.3 Правила отмены — сначала нужно подтвердить, отдаёт ли бэкенд дедлайн бесплатной отмены на этапе выбора времени (до создания заказа). (А) Если отдаёт — это доработка приложения, два требования веса 2. (Б) Если дедлайн известен только после создания заказа — перенести FR2.4.1-16 и FR2.4.1-17 в раздел подтверждения заказа, а из панели убрать. Стоимость следующего часа — отдельный мелкий пункт того же решения.Вопрос к бизнесу. Для этого ничего нет.
OQ2.4.1-6Код FR2.4.1-15Требование говорит: если выбранный период короче минимальной длительности бронирования, интерфейс показывает сообщение «Бронирование возможно только от N ч» и держит «Продолжить» недоступным. В коде вторая половина работает: пока набранная длительность меньше минимальной, кнопка перехода неактивна — проверка сравнивает суммарные часы с минимальной длительностью, которая приходит с бэкенда для каждой даты. А самого сообщения нет: пользователь видит неактивную кнопку без объяснения, почему нельзя продолжить. \ time_widget_screen.dart:470 (проверка минимальной длительности), :1638 (блокировка кнопки); текста сообщения в разделе нетБизнесOpen(А) Подтвердить требование (рекоменд.): добавить сообщение — это дешёвая правка с заметным эффектом, сейчас неактивная кнопка без пояснения выглядит как поломка приложения. (Б) Если решено обойтись без текста, стоит хотя бы подсвечивать минимальную длительность рядом с сеткой слотов, а требование переписать.Если решено обойтись без текста, стоит хотя бы подсвечивать минимальную длительность рядом с сеткой слотов, а требование переписать.
OQ2.4.1-7Код FR2.4.1-10Требование говорит: по «Продолжить» открывается 2.5 «Дополнительные позиции к заказу» с выбранным периодом бронирования. В коде переход ведёт на экран оборудования (тот же, что и с карточки площадки, см. OQ2.4-2), и делается он из трёх мест с разными данными: в двух передаётся загруженная площадка, а в третьем — пустой объект площадки, созданный на месте. Если сработает третья ветка, следующий экран останется без данных о площадке. \ time_widget_screen.dart:961 и :992 (переход с данными), :1643-1645 (переход с пустым объектом)РазработкаOpenЗавести тикет в Bitrix: свести переход к одному месту и всегда передавать загруженную площадку вместе с выбранным периодом. Проверить на стенде, какая из трёх веток срабатывает при обычном сценарии — если рабочей оказывается третья, следующий шаг сейчас получает пустые данные. Отдельно, вместе с OQ2.4-2, уточнить у бизнеса, что считать разделом 2.5: BRD называет его «Дополнительные позиции», код открывает экран оборудования.не баг
OQ2.4.1-8Код вне BRDЧто нашли: в боевом коде экрана таймслотов лежит генератор фиктивных данных: он создаёт слоты на семь дней с 10:00 до 22:00, назначает цены по времени суток и выдаёт скидку 20% всегда в 16:00. Включается он общим признаком «режим тестовых данных», который сейчас выключен, поэтому на пользователей это не влияет, — но генератор вызывается из четырёх мест наравне с реальным запросом и легко включается одной строкой. \ time_slot_bloc.dart:256-330 (генератор, скидка в 16:00 — :293), вызовы — :57, :111, :162, :215; признак — app_config.dart:37РазработкаOpenЗавести тикет в Bitrix на техуборку: вынести тестовые данные из боевого блока в отдельную реализацию репозитория — такая уже есть в проекте для других разделов, — либо удалить генератор. Поведение при этом не меняется. Приоритет невысокий, но риск реальный: признак режима тестовых данных глобальный, и включение его ради одного экрана незаметно подменит таймслоты фиктивными.не баг
OQ2.4.1-9Код FR2.4.1-5, FR2.4.1-9, FR2.4.1-18Что подтверждено: таймслоты сгруппированы по датам, для каждой группы выводятся день недели и дата; есть действие «Следующая неделя», которое подгружает следующую неделю и добавляет её к уже показанным датам. Кнопка перехода к следующему шагу неактивна, пока выбор не стал допустимым. Состояние загрузки сделано скелетонами: заголовок «Выберите время» и возврат остаются на месте, а карточки, даты и слоты заменяются заглушками. \ time_widget_screen.dart:1515 («Следующая неделя»), :167 (подгрузка), :1638 (блокировка кнопки), :173, :726, :1091 (скелетоны), time_slot_bloc.dart:101-140 (загрузка следующей недели)ПодтвержденоРасхождения нет.
OQ2.4.1-10Код FR2.4.1-11, FR2.4.1-12, FR2.4.1-13, FR2.4.1-14Что подтверждено: логика последовательного выбора работает. Недоступные слоты остаются видимыми, но затемняются и не реагируют на нажатие; выбранный слот выделяется цветом; добавление следующего последовательного слота расширяет период и увеличивает итоговую стоимость; «Очистить» сбрасывает выбор, итоговую стоимость и возвращает исходную доступность слотов. \ time_widget_screen.dart:1307-1319 (затемнение и блокировка нажатия), :1327-1331 (выделение выбранного), :470 (проверка суммарной длительности), :1596 (итоговая стоимость), :1612-1624 («Очистить»)ПодтвержденоРасхождения нет.

0 items under this folder.