Направление работ: Mobile
Код раздела: 2.3
Раздел: Поиск > Список вариантов
Статус: Готов
Ответственный: Панкова Л.А.
Версия: 0.4
Обновлено: 15.07.26
1. Назначение
Раздел описывает экран мобильного приложения со списком площадок, соответствующих параметрам поиска пользователя.
Экран позволяет просмотреть найденные варианты, выполнить поиск по названию или метро, изменить порядок выдачи и параметры поиска, а также перейти к карточке площадки, фильтрации или просмотру результатов на карте.
2. Ключевые понятия
Список вариантов - экран мобильного приложения с площадками, доступными по заданным или пропущенным параметрам поиска.
Площадка партнера - помещение, доступное пользователю для просмотра и последующего заказа.
3. Scope
Входит
S1: Поиск списка вариантов
S2: Список вариантов, если не заполняли параметры поиска
S3: Дополнительные состояния
Не входит
- Mobile 2.3.1 Поиск > Список вариантов > Фильтрация списка.
- Mobile 2.3.2 Поиск > Список вариантов > Отображение на карте.
- услуге.
4. BR
Указаны в пункте 4 разделов Back 2.2 Площадки партнеров, Back 2.6 Цены и Back 3.2 Процессинг заказов.
5. Функциональные требования (UC + FR)
| ID | Сценарий | Функциональное требование | BR | Вес | Статус |
|---|---|---|---|---|---|
| S1: FR2.3-1 | Пользователь переходит к результатам поиска площадок. | Интерфейс открывает экран “Список вариантов” и отображает найденные площадки с учетом заданных параметров поиска. | 1 | Реализовано \ OQ2.3-12 | |
| S1: FR2.3-2 | Пользователь просматривает найденные площадки. | Интерфейс отображает для каждой площадки фото, действие добавления в избранное, название, объект, площадь, расстояние, метро, рейтинг, условие предоплаты или работы по заявке и цену. Интерфейс показывает процент стоимости, который пользователь может оплатить M-баллами, и размер кэшбэка M-баллами. Для горящего предложения интерфейс отображает плашку “Горящее предложение” с размером скидки и цену до и после применения скидки. | 1 | Частично \ OQ2.3-2, OQ2.3-3 | |
| S1: FR2.3-3 | Пользователь просматривает результаты по выбранным параметрам. | Интерфейс отображает выбранные параметры над списком и показывает найденные варианты. | 1 | Частично \ OQ2.3-5 | |
| S1: FR2.3-4 | Пользователь выбирает площадку из списка. | Интерфейс открывает раздел услуге” для выбранной площадки. | 1 | Реализовано \ OQ2.3-13 | |
| S1: FR2.3-5 | Пользователь выбирает фильтрацию или просмотр результатов на карте. | Интерфейс переводит пользователя в раздел Mobile 2.3.1 “Фильтрация списка” или Mobile 2.3.2 “Отображение на карте” в зависимости от выбранного действия. | 1 | Реализовано \ OQ2.3-14 | |
| S2: FR2.3-6 | Пользователь пропустил заполнение параметров поиска. | Интерфейс отображает экран “Список вариантов” без выбранных параметров, действие “Выбрать дату” и цену каждой площадки в формате “От N ₽“. | 1 | Частично \ OQ2.3-6 | |
| S2: FR2.3-7 | Пользователь выполняет поиск внутри списка. | При выборе поля “Название или метро” интерфейс активирует его, открывает клавиатуру и обновляет список в соответствии с введенным названием площадки или метро. | 1 | Частично \ OQ2.3-7 | |
| S2: FR2.3-8 | Пользователь изменяет порядок выдачи. | Интерфейс открывает окно “Какие площадки показывать сначала?” с вариантами “Стоимость по возрастанию”, “Стоимость по убыванию”, “По популярности”, “По рейтингу” и “Рядом со мной” и применяет выбранный порядок к списку. | 2 | Реализовано | |
| S2: FR2.3-9 | Пользователь меняет дату или опции поиска. | Интерфейс открывает окно параметров поиска с рекламным баннером, выбором количества человек, времени и даты, а также действиями “Пропустить” и “Найти”. | 1 | Реализовано \ OQ2.3-15 | |
| S2: FR2.3-10 | Пользователь применяет выбранные дату, время или опции. | По действию “Найти” интерфейс обновляет список, отображает выбранные параметры над ним, а в карточках - наличие строгого промежутка и конкретные цены. | 1 | Частично \ OQ2.3-4 | |
| S3: FR2.3-11 | Выбранный временной промежуток занят на всех площадках. | Интерфейс отображает окно “Нет доступных площадок” с ближайшим доступным временным промежутком и вопросом о продолжении поиска, а также действия “Назад” и “Да”. | 1 | Не реализовано \ OQ2.3-1 | |
| S3: FR2.3-12 | Выполняется загрузка списка вариантов. | До получения данных интерфейс отображает скелетоны карточек площадок. Элементы управления отображаются без плейсхолдеров и доступны пользователю сразу. | 1 | Частично \ OQ2.3-8 |
6. Открытые вопросы
Пин контекста. BRD 2.3 «Список вариантов» v0.1 · репозиторий
booking.mobile.flutter(Flutter/Dart) · commitdad0c65/ веткаdev· дата сверки 2026-07-15 · якорь:lib/src/feature/rooms_search/(экранwidget/rooms_search_screen.dart, карточкаwidget/room_card.dart, моделиmodel/room.dart,model/room_price.dart,model/sort_options.dart, блокbloc/rooms_search_bloc.dart, модалка параметровwidget/search_parametres_modal/), смежныеlib/src/feature/search_params/,lib/src/feature/map_search/(переход на карту — точка перехода 2.3.2). Маршрутизация без сверки с гайдбуком (гайдбук не передан) — вопросы «как должно быть» уходят в Бизнес со статусом Open, чистые дефекты/техуборка — «Закрывает PM». Адресаты: бизнес → Герман, разработка → Владислав. Сводка: открытых вопросов 11 (Open бизнесу 4 · Open разработке 5 · Закрывает PM 2) · подтверждено веса 1 — 4 (OQ2.3-12…15) · отрезано находок обратного прохода ~4 (закомментированный легаси-код и экспериментальные виджеты). Вопросы веса 1 по нереализованному/частичному — в начале таблицы.
| ID | Источник | Вопрос | Кому | Статус | Рекомендации | Итоговое решение |
|---|---|---|---|---|---|---|
| OQ2.3-1 | Код FR2.3-11 | Требование говорит: если выбранный промежуток занят на всех площадках, показать окно «Нет доступных площадок» с ближайшим доступным временем и вопросом о продолжении поиска (кнопки «Назад» и «Да»). В коде такого окна на экране списка нет. Пустой список показывает заглушку-«рыбу»: картинка + текст «Дизайн в пути… Дениска сделает очень скоро!)». Окно «Нет доступных площадок» есть только на экране карты (другой раздел), причём без ближайшего слота и кнопок «Назад»/«Да». \ rooms_search_screen.dart:616-626; окно на карте — map_search/widget/map_search_screen.dart:936 | Разработка (Владислав) | Open | (А) Реализовать окно «Нет доступных площадок» на экране списка: ближайший доступный промежуток + «Назад»/«Да» — рекомендуется (иначе сценарий S3 не работает, пользователь видит текст-заглушку). (Б) Оставить как есть — не годится для релиза. Бизнесу подтвердить текст и логику «ближайшего промежутка». | Вопрос к бизнесу и бэку, мобильный клиент не обладает достаточной инфорацией для реализации этого требования От бизнеса: инициировать вопрос к Бэку |
| OQ2.3-2 | Код FR2.3-2 | Требование говорит: для горящего предложения в карточке показать плашку «Горящее предложение», размер скидки и цену до и после применения скидки. В коде карточка показывает только плашку с текстом скидки вида «-20%» и иконкой огня; слова «Горящее предложение» нет, цена показывается одна (итоговая), «цены до скидки» на карточке нет. Поле с ценой до скидки (priceBeforeDiscount) приходит из API, но нигде в карточке не выводится. \ room_card.dart:179-224 (плашка), room_card.dart:522 (единственная цена); признак горящего — rooms_search_screen.dart:589-592 | Бизнес (Герман) | Open | (А) Достроить карточку под BRD: подпись «Горящее предложение» + старая/новая цена — рекомендуется, если это утверждённый вид карточки. (Б) Признать текущий вид (бейдж «-N%») достаточным и привести BRD в соответствие коду. Нужно продуктовое решение о составе карточки горящего предложения. | Все там есть в карточке, и старая цена и иконка огня |
| OQ2.3-3 | Код FR2.3-2 | Требование говорит: в карточке площадки показывать «условие предоплаты или работы по заявке». В коде карточка списка этого не показывает. Данные у модели есть (mightBePrepay, onlinePrepaymentPercent), но выводятся только на экране деталей площадки (раздел 2.4), а в карточке списка не рендерятся. \ карточка — room_card.dart:130-601 (поля не используются); поля модели — model/room.dart:73,83; вывод в 2.4 — room_details/widget/room_details_screen.dart:1537-1541 | Бизнес (Герман) | Open | (А) Добавить в карточку списка индикатор «предоплата / работа по заявке» — рекомендуется, если это влияет на выбор до входа в карточку. (Б) Убрать требование из карточки списка (оставить только в 2.4) и поправить BRD. Нужно решение продукта. | добавить в карточку списка индикатор «предоплата / работа по заявке» |
| OQ2.3-4 | Код FR2.3-10 | Требование говорит: после «Найти» в карточках отображается «наличие строгого промежутка» и конкретные цены. В коде конкретные цены показываются (priceDisplayText), а индикатор «строгого промежутка» на карточках списка никогда не выводится: параметр time карточки при построении списка всегда передаётся null с пометкой «Not available in room search». В самой карточке верстка под этот бейдж есть, но данными он не наполняется. \ rooms_search_screen.dart:570,641 (time: null), верстка бейджа — room_card.dart:386-421 | Разработка (Владислав) | Open | (А) Прокинуть в карточку признак/значение строгого промежутка из данных поиска — рекомендуется (верстка уже готова, не хватает данных). (Б) Если строгий промежуток не показывается на карточке списка сознательно — уточнить у бизнеса и поправить BRD. Бизнесу подтвердить, что именно показывает индикатор. | верстка уже готова, не хватает данных От бизнеса: инициировать вопрос к Бэку |
| OQ2.3-5 | Код FR2.3-3 | Требование говорит: над списком отображаются выбранные параметры. В коде над списком рендерится только один чип — дата+время (или «Выбрать дату» / «Поиск без даты»). Чипы остальных выбранных параметров (цена, площадь, характеристики, выбранная опция/кол-во человек) отключены — код их построения закомментирован. \ активный чип даты — rooms_search_screen.dart:684-729,881-909; закомментированные чипы параметров — rooms_search_screen.dart:733-879 | Разработка (Владислав) | Open | (А) Включить отображение остальных выбранных параметров над списком — рекомендуется, если BRD трактует «параметры» шире даты/времени. (Б) Если для 2.3 достаточно чипа даты/времени (а фильтры — раздел 2.3.1) — сузить формулировку BRD. Нужно решение по объёму «параметров». | Включить отображение остальных выбранных параметров над списком |
| OQ2.3-6 | Код FR2.3-6 | Требование говорит: при пропуске параметров показать действие «Выбрать дату» и цену «От N ₽». В коде цена «От N ₽» показывается корректно (priceDisplayText), но при пропуске параметров чип над списком подписан «Поиск без даты», а не «Выбрать дату» (текст «Выбрать дату» появляется только когда дата вообще не выбиралась и режим пропуска не включён). Нажатие на чип всё равно открывает выбор даты. \ «От N ₽» — model/room_price.dart:62-73; подпись чипа — model/search_params.dart:85-92, rooms_search_screen.dart:1385-1405 | Бизнес (Герман) | Open | (А) Привести подпись действия в режиме пропуска к «Выбрать дату» — рекомендуется, если BRD фиксирует именно этот текст. (Б) Оставить «Поиск без даты» и поправить BRD. Расхождение только в тексте действия, поведение (открытие календаря) работает. | Привести подпись действия в режиме пропуска к «Выбрать дату» |
| OQ2.3-7 | Код FR2.3-7 | Требование говорит: при выборе поля поиска оно активируется с подсказкой «Найти». В коде поле поиска по названию/метро работает (ввод с задержкой 300 мс обновляет список, клавиатура открывается штатно), но подсказка (placeholder) всегда «Название или метро»; отдельной подсказки «Найти» при активации нет, кнопки/действия «Найти» на клавиатуре тоже не задано. \ rooms_search_screen.dart:366-402 (поле, hint «Название или метро»), rooms_search_screen.dart:376-386 (обновление списка) | Бизнес (Герман) | Open | (А) Добавить подсказку/действие «Найти» при активации поля — если это утверждённое поведение. (Б) Признать текущую подсказку достаточной и убрать «Найти» из BRD — рекомендуется (расхождение косметическое). Нужно решение дизайна/продукта по тексту. | Признать текущую подсказку достаточной и убрать «Найти» из BRD — рекомендуется (расхождение косметическое) От бизнеса: внесли изменения в BRD |
| OQ2.3-8 | Код FR2.3-12 | Требование говорит: при загрузке показывать плейсхолдеры элементов управления и карточек. В коде при первичной загрузке показываются скелетоны только карточек (6 «пустых» карточек через Skeletonizer); элементы управления (строка поиска, кнопки сортировки/фильтра, чип даты) при этом отрисованы обычным образом, без плейсхолдеров. \ rooms_search_screen.dart:601-611 (скелетоны карточек), панель управления — rooms_search_screen.dart:322-543 (без скелетонов) | Разработка (Владислав) | Open | (А) Добавить плейсхолдеры и для элементов управления — если BRD требует буквально. (Б) Признать скелетон карточек достаточным и поправить BRD — рекомендуется (элементы управления доступны сразу, что удобнее). | Признать скелетон карточек достаточным и поправить BRD От бизнеса: внесли изменения в BRD |
| OQ2.3-9 | Код вне BRD | Что нашли: состояния «пусто» и «ошибка» на экране списка используют временные/отладочные тексты вместо продуктовых. Ошибка загрузки показывает англоязычную строку failed to fetch posts; пустой список — заглушку «Дизайн в пути… Дениска сделает очень скоро!)». Оба текста попадают в продуктовую ветку экрана. \ ошибка — rooms_search_screen.dart:551; пусто — rooms_search_screen.dart:616-626 | Закрывает PM | Закрывает PM | Закрываю сам: завести тикет в Bitrix на замену отладочных текстов состояний «ошибка»/«пусто» продуктовыми (связать с OQ2.3-1 — пустое состояние S3). Продуктового выбора нет, это дефект-заглушка. | От бизнеса: ожидаем реализации после Back: 7.1 |
| OQ2.3-10 | Код вне BRD | Что нашли: пагинация («бесконечный скролл») работает на «зашитых» значениях, а не на данных пагинации от бэкенда. Общее число элементов жёстко задано 10000, флаг «показать догрузку» жёстко false; реальные значения pagination.itemsCount закомментированы. Догрузка по скроллу (порог 90% списка) шлёт запросы до тех пор, пока сервер не вернёт пусто. \ rooms_search_bloc.dart:210,218 (хардкод), rooms_search_bloc.dart:255,270; триггер скролла — rooms_search_screen.dart:966-977 | Разработка (Владислав) | Open | (А) Вернуть пагинацию на реальные itemsCount/флаг догрузки от ответа сервера — рекомендуется (иначе индикатор догрузки и условие «загружены все варианты» некорректны). (Б) Осознанно оставить «до пустого ответа» — тогда описать это поведение. Вопрос о корректности механизма пагинации. | Исправить когда будет пагинация |
| OQ2.3-11 | Код вне BRD | Что нашли: в карточке есть неактивная кнопка (область), которая по нажатию только печатает в лог «кнопка купить» и ничего не делает. Отдельно: расстояние в карточку передаётся посчитанным (distance/1000 + «km»), но сама карточка это значение игнорирует и рисует room.distance напрямую с суффиксом «км» — единица измерения и значение могут расходиться. \ мёртвая кнопка — room_card.dart:507-510; расстояние — rooms_search_screen.dart:572-574 (проп) vs room_card.dart:452-453 (показ) | Закрывает PM | Закрывает PM | Закрываю сам: тикет в Bitrix — убрать мёртвую кнопку «купить» и согласовать единицу/источник расстояния (проп vs room.distance). Техуборка, продуктового решения не требует. | убрать мёртвую кнопку «купить» |
| OQ2.3-12 | Код FR2.3-1 | Что подтверждено: при переходе к результатам открывается экран «Список вариантов» и загружает площадки. Экран при создании шлёт события updateRooms + updateRoomsPrices; список запрашивается по выбранной сфере и городу, цены — по дате/времени/опции. Найденные площадки рендерятся списком карточек. \ rooms_search_screen.dart:37-91 (инициализация), rooms_search_bloc.dart:195-222 (запрос по сфере/городу), список — rooms_search_screen.dart:556-599. Нюанс: сам список фильтруется по сфере+городу, дата/время влияют на расчёт цены, а не на состав списка. | — | Подтверждено | — | |
| OQ2.3-13 | Код FR2.3-4 | Что подтверждено: нажатие на карточку открывает раздел 2.4 «Информация о площадке/услуге» для выбранной площадки — навигация на RoomDetailsRoute с передачей площадки и параметров поиска. \ room_card.dart:143-161 | — | Подтверждено | — | |
| OQ2.3-14 | Код FR2.3-5 | Что подтверждено: есть оба перехода — кнопка фильтров открывает модалку фильтрации (2.3.1), плавающая кнопка карты ведёт на экран карты (2.3.2). \ фильтры — rooms_search_screen.dart:495-538; карта — rooms_search_screen.dart:942-945. Детально разделы 2.3.1/2.3.2 не сверялись (вне scope). | — | Подтверждено | — | |
| OQ2.3-15 | Код FR2.3-9 | Что подтверждено: окно параметров поиска содержит все элементы из требования — рекламный баннер (карусель из репозитория баннеров), выбор количества человек/вида работ, выбор времени, выбор даты (календарь), кнопки «Пропустить» и «Найти». \ баннер — search_parametres_modal.dart:261-405; кнопки — search_parametres_modal.dart:541,546; кол-во человек — options_panel.dart:93-106; время — options_panel.dart:147-204; дата — search_parametres_modal.dart:437-513. Также подтверждено (FR2.3-8, вес 2): окно «Какие площадки показывать сначала?» с 5 вариантами сортировки один-в-один с BRD — rooms_search_screen.dart:428-479, model/sort_options.dart:3-8. | — | Подтверждено | — |