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

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

Раздел: Поиск > Список вариантов > Фильтрация списка

Статус: Готов

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

Версия: 0.1

Обновлено: 15.07.26


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

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

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

Фильтрация списка - отбор площадок по выбранным пользователем условиям.

Сфера и опции - выбранное направление и связанный с ним набор доступных групп и параметров фильтрации.

3. Scope

Входит

S1: Фильтрация списка

S2: Взаимоисключающий сценарий фильтрации

S3: Выбор “Хотя бы один из выбранных фильтров”

S4: Дополнительное состояние экрана

Не входит

4. BR

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

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

IDСценарийФункциональное требованиеBRВесСтатус
S1: FR2.3.1-1Пользователь открывает фильтрацию списка.Интерфейс открывает экран “Фильтры” для списка вариантов выбранной сферы.1Реализовано
OQ2.3.1-11
S1: FR2.3.1-2Интерфейс получил доступные параметры фильтрации.Интерфейс всегда отображает группу “Основные” и диапазоны “Стоимость бронирования” и “Площадь”.

Остальные группы и параметры интерфейс отображает динамически в соответствии с ответом Back для выбранной сферы. Например, могут быть доступны группы “Удобства”, “Интерьер”, “Оборудование”, “Сервис” и т. д.
1Реализовано
OQ2.3.1-12
S1: FR2.3.1-3Пользователь выбирает основной фильтр.В группе “Основные” интерфейс позволяет выбрать один вариант: “Показывать занятые”, “Без заявки”, “Без предоплаты” или “Частичная оплата баллами”.1Не реализовано
OQ2.3.1-8
S1: FR2.3.1-4Пользователь задает диапазон стоимости или площади.Интерфейс позволяет указать минимальное и максимальное значения для “Стоимости бронирования” и “Площади” с помощью полей и ползунков диапазона.1Реализовано
OQ2.3.1-13
S1: FR2.3.1-5Пользователь выбирает параметры динамической группы.Интерфейс отображает до четырех полученных от Back тегов и позволяет выбрать или отменить выбор каждого тега.

Если в группе доступно больше четырех тегов, интерфейс отображает действие “Все (N)” с общим количеством тегов. По действию “Все (N)” интерфейс открывает окно со всеми тегами группы, вариантом “Хотя бы один из выбранных фильтров” и действием “Применить”.
1Не реализовано
OQ2.3.1-4
S1: FR2.3.1-6Пользователь изменяет выбранные фильтры.Интерфейс отображает выбранное состояние основных, диапазонных и теговых фильтров. После каждого изменения интерфейс обновляет счетчик “Найдено X из Y вариантов”.1Частично
OQ2.3.1-6
S1: FR2.3.1-7Пользователь применяет фильтры.По действию “Продолжить” интерфейс применяет выбранные фильтры и возвращает пользователя в раздел Mobile 2.3 “Список вариантов”.1Не реализовано
OQ2.3.1-1
S1: FR2.3.1-8Пользователь сбрасывает фильтры.По действию “Очистить” интерфейс сбрасывает все выбранные основные, диапазонные и теговые фильтры и обновляет счетчик найденных вариантов.1Не реализовано
OQ2.3.1-2
S2: FR2.3.1-9Пользователь выбирает условия в нескольких группах.Интерфейс применяет строгую фильтрацию между группами: площадка должна одновременно соответствовать условиям каждой группы, в которой выбраны фильтры. Внутри теговой группы по умолчанию площадка должна одновременно содержать все выбранные теги.1Частично
OQ2.3.1-3
S2: FR2.3.1-10Пользователь изменяет основной, диапазонный или теговый фильтр.Интерфейс сохраняет видимыми все возможные теги и динамически пересчитывает количество подходящих вариантов в скобках у каждого тега.

Если подходящих вариантов по тегу нет, интерфейс отображает значение “0” и делает тег недоступным для выбора, не скрывая его.
1Частично
OQ2.3.1-7
S3: FR2.3.1-11Пользователь выбирает “Хотя бы один из выбранных фильтров” внутри теговой группы и применяет выбор.Интерфейс учитывает площадки, соответствующие хотя бы одному выбранному тегу этой группы. Для остальных групп сохраняются заданные в них условия фильтрации.1Не реализовано
OQ2.3.1-5
S4: FR2.3.1-12Загружаются доступные параметры фильтрации.При открытии экрана интерфейс отображает состояние загрузки с плейсхолдерами параметров до получения доступных групп и значений от Back.1Частично
OQ2.3.1-9

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

Пин: BRD 2.3.1 v0.1 · репозиторий booking.mobile.flutter · commit dad0c65 / ветка dev · дата сверки 2026-07-15 · якорь lib/src/feature/rooms_search/ Сводка: 13 вопросов — Open 9 (бизнесу 1 · разработке 8) · Закрывает PM 1 · Подтверждено 3. Отрезано находок обратного прохода: 4 (сортировка и строка поиска — принадлежат Mobile 2.3; неверные ярлыки событий аналитики; незаполненная mock-реализация фильтра). Маршрутизация без сверки с гайдбуком (гайдбук на вход не передавался — спорные требования отнесены бизнесу как «подтвердить нечем»).

IDИсточникВопросКомуСтатусРекомендацииИтоговое решение
OQ2.3.1-1Код FR2.3.1-7Требование говорит: по кнопке «Продолжить» выбранные фильтры применяются к списку вариантов, и пользователь возвращается в раздел 2.3. В коде: обработчик кнопки «Продолжить» пустой, а обработчик применения фильтров в списке вариантов полностью закомментирован (ничего не делает); само событие применения даже не несёт данных фильтра. Нажатие «Продолжить» не применяет фильтры, не закрывает шторку и не обновляет список.
rooms_filter_modal.dart:377; rooms_search_bloc.dart:88-94,390-429
Разработка (Владислав)OpenРазблокирующий: пока это не сделано, ни один фильтр не влияет на список. (А, рекоменд.) реализовать применение — передать выбранные значения фильтра в поиск списка и закрыть шторку; (Б) временно скрыть кнопку, если функция не готова. Связать с OQ2.3.1-3, OQ2.3.1-10.реализовать применение — передать выбранные значения фильтра в поиск списка и закрыть шторку
OQ2.3.1-2Код FR2.3.1-8Требование говорит: по кнопке «Очистить» сбрасываются все выбранные фильтры (основные, диапазоны, теги) и обновляется счётчик найденных вариантов. В коде: обработчик кнопки «Очистить» пустой — нажатие ничего не сбрасывает и не обновляет счётчик.
rooms_filter_modal.dart:378
Разработка (Владислав)Open(А, рекоменд.) реализовать сброс состояния фильтра к значениям по умолчанию с перезапросом счётчика; (Б) скрыть кнопку до реализации.реализовать сброс состояния фильтра к значениям по умолчанию с перезапросом счётчика
OQ2.3.1-3Код FR2.3.1-9Требование говорит: строгая фильтрация между группами (площадка удовлетворяет условиям каждой группы, где что-то выбрано), а внутри теговой группы по умолчанию — содержит все выбранные теги. В коде: выбранные пользователем теги вообще не отправляются на бэкенд — поле со списком тегов в запросе всегда пустое, признак «хотя бы один» жёстко выставлен в «нет». Теговая фильтрация не срабатывает; совместность условий между группами цены/площади/основных решается на бэкенде и в этом коде не проверяется.
rooms_filter_cubit.dart:54-63,233-246; filter_request.dart:23
Разработка (Владислав)Open(А, рекоменд.) передавать выбранные теги в запрос фильтрации; поведение «И между группами» подтвердить на бэкенде (вне этого репозитория). (Б) если фильтрация по тегам не входит в эту версию — согласовать урезание требования. Связать с OQ2.3.1-1.передавать выбранные теги в запрос фильтрации
OQ2.3.1-4Код FR2.3.1-5Требование говорит: показывать до четырёх тегов в группе; при большем числе — действие «Все (N)» с общим числом тегов, открывающее окно со всеми тегами группы, опцией «Хотя бы один из выбранных фильтров» и кнопкой «Применить». В коде: показываются сразу все теги без ограничения в четыре; ссылка «Все(N)» отрисована, но не имеет обработчика — нажатие не открывает никакого окна; отдельного окна со всеми тегами, опцией «хотя бы один» и кнопкой «Применить» нет. Число N считается по тегам с ненулевым количеством, а не по всем тегам группы.
rooms_filter_modal.dart:293-308; section_title.dart:45-57
Разработка (Владислав)Open(А, рекоменд.) реализовать окно «Все теги» с показом до 4 в группе, опцией «хотя бы один» и кнопкой «Применить»; привязать обработчик к «Все(N)». (Б) согласовать с бизнесом показ всех тегов без сворачивания. Связать с OQ2.3.1-5.реализовать окно «Все теги» с показом до 4 в группе, опцией «хотя бы один» и кнопкой «Применить»; привязать обработчик к «Все(N)»
OQ2.3.1-5Код FR2.3.1-11Требование говорит: при выборе «Хотя бы один из выбранных фильтров» внутри теговой группы учитываются площадки, подходящие хотя бы под один тег группы, а для остальных групп условия сохраняются. В коде: признак «хотя бы один» есть в модели и в запросе, но нигде не переключается пользователем (в интерфейсе нет такого элемента) и всегда отправляется как «нет». Сценарий S3 не реализован.
rooms_filter_cubit.dart:63,246; filter_state_model.dart:27
Разработка (Владислав)Open(А, рекоменд.) добавить переключатель «хотя бы один» в окно тегов (см. OQ2.3.1-4) и передавать его в запрос. (Б) согласовать перенос сценария S3 в следующую версию. Связать с OQ2.3.1-4.добавить переключатель «хотя бы один» в окно тегов (см. OQ2.3.1-4) и передавать его в запрос.
OQ2.3.1-6Код FR2.3.1-6Требование говорит: интерфейс показывает выбранное состояние основных, диапазонных и теговых фильтров и после каждого изменения обновляет счётчик «Найдено X из Y вариантов». В коде: выбранное состояние отображается для всех трёх видов фильтров; счётчик есть, но с текстом «X из Y вариантов» (без слова «Найдено») и обновляется только при смене чекбоксов и диапазонов — при выборе/снятии тега счётчик не пересчитывается, потому что выбор тега не вызывает новый запрос.
button_panel.dart:88-96; rooms_filter_cubit.dart:94-137
Разработка (Владислав)Open(А, рекоменд.) пересчитывать счётчик и при изменении тегов (перезапрос при выборе тега); текст привести к «Найдено X из Y». (Б) если пересчёт по тегам до применения не нужен — согласовать с бизнесом. Связать с OQ2.3.1-3.пересчитывать счётчик и при изменении тегов (перезапрос при выборе тега); текст привести к «Найдено X из Y»
OQ2.3.1-7Код FR2.3.1-10Требование говорит: все возможные теги остаются видимыми, у каждого динамически пересчитывается число в скобках; при нуле тег показывает «0», становится недоступным, но не скрывается. В коде: число в скобках у тегов есть; пустые теги (0) делаются недоступными и по умолчанию остаются видимыми — это совпадает. Но: (1) пересчёт количества у тегов происходит при смене диапазонов и чекбоксов, а при выборе тега — нет; (2) есть дополнительный переключатель «Показывать все», который прячет пустые теги (тег с нулём исчезает) — это противоречит требованию «не скрывая его».
filters_chips.dart:44-57; rooms_filter_modal.dart:69-91; rooms_filter_cubit.dart:139-149
Разработка (Владислав)Open(А, рекоменд.) пересчитывать количества и при выборе тега; поведение переключателя «Показывать все» согласовать с бизнесом — убрать скрытие пустых тегов либо зафиксировать как допустимое отклонение от требования. (Б) оставить как есть и поправить формулировку требования.пересчитывать количества и при выборе тега
OQ2.3.1-8Код FR2.3.1-3Требование говорит: в группе «Основные» можно выбрать один вариант из четырёх («Показывать занятые», «Без заявки», «Без предоплаты», «Частичная оплата баллами»). В коде: это четыре независимых флажка — их можно включить одновременно, взаимного исключения нет.
rooms_filter_modal.dart:147-217; filter_state_model.dart:23-26
Бизнес (Герман)OpenНужно продуктовое решение: (А) это действительно единичный (взаимоисключающий) выбор — тогда переделать в код одиночного выбора; (Б, рекоменд.) опции независимы и требование сформулировано неточно — тогда поправить BRD (параметры выглядят независимыми по смыслу).это действительно единичный (взаимоисключающий) выбор — тогда переделать в код одиночного выбора
OQ2.3.1-9Код FR2.3.1-12Требование говорит: при открытии экрана показывается состояние загрузки с плейсхолдерами параметров, пока не пришли группы и значения от Back. В коде: состояние загрузки есть, но вместо плейсхолдеров параметров отрисовывается стандартная тех-заглушка Flutter (пустой прямоугольник с крестом); та же заглушка мелькает на весь экран при каждом изменении фильтра (чекбокс/диапазон) во время перезапроса.
rooms_filter_modal.dart:124-130
Разработка (Владислав)Open(А, рекоменд.) заменить тех-заглушку на скелетон параметров фильтра; не показывать полноэкранную загрузку при точечных изменениях. (Б) согласовать упрощённый индикатор загрузки.заменить тех-заглушку на скелетон параметров фильтра
OQ2.3.1-10Код вне BRDПроблема: вокруг фильтрации есть мёртвый и дублирующий код: параллельная реализация фильтра RoomsFilterBloc заведена в экране списка, но её обработчики закомментированы; старые версии шторки rooms_filter_modal_old.dart и rooms_filter_modal_dev.dart не используются; обработчик применения фильтров в списке пустой (см. OQ2.3.1-1). Это затрудняет сопровождение и скрывает, какой путь фильтрации живой.
rooms_filter_bloc.dart:26-46; rooms_search_screen.dart:47-48; rooms_search_bloc.dart:390-429
Разработка (Владислав)Закрывает PMЗакрываю сам: удалить неиспользуемые реализации и мёртвые ветки после реализации применения фильтров → тикет в Bitrix. Связать с OQ2.3.1-1.Почистить код
OQ2.3.1-11Код FR2.3.1-1Что подтверждено: по нажатию иконки фильтров открывается шторка «Фильтры» для выбранной сферы и города (идентификаторы берутся из параметров поиска).
rooms_search_screen.dart:495-515
ПодтвержденоРасхождения нет.
OQ2.3.1-12Код FR2.3.1-2Что подтверждено: всегда отображаются группа «Основные» и два диапазона — «Площадь» и «Стоимость бронирования»; остальные группы и теги приходят динамически из ответа бэкенда (метод FiltersMobile) и отрисовываются по выбранной сфере.
rooms_filter_modal.dart:146-293; partner_zone_repository.dart:85-118
ПодтвержденоРасхождения нет.
OQ2.3.1-13Код FR2.3.1-4Что подтверждено: для «Стоимости бронирования» и «Площади» есть поля ввода минимума и максимума и ползунок диапазона; ввод ограничен цифрами и диапазоном, изменение поля/ползунка пересчитывает результат.
filter_slider.dart:179-297; rooms_filter_cubit.dart:205-286
ПодтвержденоРасхождения нет.

0 items under this folder.