Направление работ: Mobile Код раздела: 3.2 Раздел: Для вас > Вкладка: Горящие Статус: черновик Ответственный: Панкова Л.А. Версия: 0.1 Обновлено: 27.07.26
1. Назначение
Раздел описывает вкладку “Горящие” в блоке “Для вас”: просмотр актуальных горящих предложений по сферам, раскрытие полного списка выбранной сферы, переходы к соседним вкладкам и карточке площадки, а также состояния пустого списка и загрузки.
Пользовательская цель: найти площадки с актуальными скидками и забронировать их с дополнительной выгодой.
Раздел зависит от Back: 2.7.2 Горящие предложения в части получения активных горящих предложений и размера скидки, Back: 2.2 Площадки партнеров в части данных площадок и Back: 8.2.1 Сферы и опции в части группировки площадок по сферам.
2. Ключевые понятия
Горящее предложение — скидка на конкретный незанятый временной интервал площадки или услуги.
Площадка — помещение партнера, доступное пользователю для бронирования.
Сфера — категория, по которой площадки объединяются в группы.
3. Scope
Входит
S1: Вкладка “Горящие” предложения и переходы к следующим шагам.
S2: Дополнительные состояния.
Не входит
4. BR
Указаны в пункте 4 раздела Back: 2.7.2 Горящие предложения.
5. Функциональные требования (UC + FR)
| ID | Сценарий | Функциональное требование | BR | Вес | Статус |
|---|---|---|---|---|---|
| S1: FR3.2-1 | Пользователь открывает вкладку “Горящие”. | Интерфейс показывает вкладку “Горящие” активной и позволяет перейти на соседние вкладки Mobile 3.1 “Избранное” и Mobile 3.3 “Подборка”. | 1 | Частично OQ3.2-1 | |
| S1: FR3.2-2 | Пользователь просматривает горящие предложения. | Интерфейс: - показывает только площадки с активной скидкой; - группирует площадки по сферам; - отображает название каждой сферы; - показывает в группе не более двух карточек площадок; - если в сфере доступно больше двух площадок, показывает действие “Все (N)” с общим количеством площадок в группе. Карточка площадки содержит: - изображения площадки с возможностью горизонтальной прокрутки; - действие добавления площадки в избранное; - размер активной скидки и признак горящего предложения; - процент стоимости, доступный к оплате M-баллами; - названия площадки и объекта; - площадь, расстояние, метро и рейтинг; - доступный временной интервал; - условие предоплаты, если оно применимо; - цену до и после скидки; - количество начисляемых M-баллов. | 1 | Частично OQ3.2-2, OQ3.2-3, OQ3.2-4, OQ3.2-8 | |
| S1: FR3.2-3 | Пользователь нажимает “Все (N)” в группе. | Интерфейс открывает поверх вкладки нижнюю панель с названием выбранной сферы и полным списком ее площадок с активной скидкой. | 1 | Не реализовано OQ3.2-5, OQ3.2-9 | |
| S1: FR3.2-4 | Пользователь выбирает карточку площадки. | Интерфейс переводит пользователя в услуге” для выбранной площадки. | 1 | Реализовано OQ3.2-6 | |
| S2: FR3.2-5 | Горящие предложения отсутствуют. | Интерфейс показывает пустое состояние с текстами “Горящих предложений пока нет” и “Добавьте площадку и они появятся здесь”. | 1 | Реализовано | |
| S2: FR3.2-6 | Список горящих предложений загружается. | Интерфейс показывает плейсхолдеры названия сферы и карточек площадок до завершения загрузки. | 2 | Частично OQ3.2-7 |
6. Открытые вопросы
Сверка с кодом: BRD 3.2 v0.1 · репозиторий
booking.mobile.flutter· commitb44cfa2/origin/dev· 29.07.26 · якорьlib/src/feature/for_you/Сводка: 13 вопросов (Open 12 · Подтверждено 1) Маршрутизация без сверки с гайдбуком (гайдбук не передавался).
| ID | Источник | Вопрос | Кому | Статус | Рекомендации | Итоговое решение |
|---|---|---|---|---|---|---|
| OQ3.2-1 | Код FR3.2-1 | Требование говорит: с вкладки «Горящие» можно перейти на соседние вкладки «Избранное» и «Подборки». В коде вкладок две: «Избранное» и «Горящие». Вкладки «Подборки» нет — ни в переключателе, ни в наборе экранов. Переход, описанный в требовании, выполнить невозможно; раздел Mobile 3.3 Вкладка: Подборки в приложении пока не существует. \ for_you_screen.dart:86 (переключатель на две вкладки), :123-127 (список вкладок), :130-137 (содержимое двух вкладок) | Бизнес | Open | Решить, входят ли «Подборки» в ближайший релиз. (А) Если нет (рекоменд.) — убрать упоминание «Подборки» из FR3.2-1, оставив только переход на «Избранное», и вернуть его в требование вместе с разделом 3.3. (Б) Если да — раздел 3.2 зависит от 3.3, и это стоит зафиксировать в скоупе, потому что третья вкладка меняет сам переключатель, а не только новый экран. | |
| OQ3.2-2 | Код FR3.2-2 | Требование говорит: в группе сферы показывается не более двух карточек, а если площадок больше двух — появляется действие «Все (N)». В коде ограничения на две карточки нет: при открытии вкладки запрашивается до 100 площадок в каждой сфере, и все они выводятся списком. Действие «Все (N)» показывается не по правилу «больше двух», а только если сервер сообщил, что площадок в сфере больше, чем уже загружено — то есть практически никогда, пока их меньше сотни. На практике пользователь видит всю сферу сразу и без кнопки. \ hot_deals_bloc.dart:60 (запрашивается 100 площадок на сферу, при этом комментарии в строках 11 и 34 и значение по умолчанию в строке 38 всё ещё говорят про 3), for_you_screen.dart:703 (выводятся все загруженные), :706 (условие показа «Все (N)») | Разработка | Open | Завести тикет в Bitrix: показывать в группе первые две карточки, а остальные скрывать за «Все (N)», где N — общее количество площадок сферы. Продуктового выбора здесь нет — требование однозначное; заодно стоит убрать расхождение между константой, комментариями и значением по умолчанию. Величину «не более двух» удобно вынести в одно место, чтобы её можно было изменить без правок вёрстки. | |
| OQ3.2-3 | Код FR3.2-2 | Требование говорит: карточка площадки содержит изображения с возможностью горизонтальной прокрутки и цену до и после скидки. В коде карточка показывает одно изображение (берётся первое из списка, остальные не используются) без пролистывания и одну цену — уже со скидкой. Важно: цену «до скидки» нельзя вывести силами приложения — в ответе по горящим предложениям приходят только итоговая цена и процент скидки, исходной цены там нет, и в расчёте карточки процент скидки не участвует. То есть требование упирается в контракт бэкенда. \ room_card.dart:185-190 (одно изображение, прокрутки нет), :527 (одна цена), hot_deals_response.dart:45-46 (в ответе только цена и процент скидки), room_price.dart:57-78 (процент скидки в расчёте цены не используется), room.dart:145-152 (из списка изображений берётся первое) | Разработка | Open | Разбить на две задачи. Прокрутка изображений — чистый фронт, завести тикет в Bitrix; уточните заранее у бизнеса, меняем ли карточку везде (она общая с избранным и поиском) или только на этой вкладке — дешевле везде. Цена «до скидки» — сначала правка контракта в Back: 2.7.2 Горящие предложения: нужно, чтобы сервер отдавал исходную цену, иначе требование невыполнимо. | |
| OQ3.2-4 | Код FR3.2-2 | Требование говорит: карточка содержит условие предоплаты, если оно применимо. В коде признак предоплаты и её процент приходят с сервера и разбираются в модели горящего предложения, но в карточку не передаются и нигде не отображаются. То есть данные есть, вывода нет. \ hot_deals_response.dart:52-55 (поля OnlinePrepaymentPercent и MightBePrepay), for_you_screen.dart:837-850 (сборка карточки — эти поля не используются) | Разработка | Open | Завести тикет в Bitrix: выводить условие предоплаты в карточке горящего предложения. Формулировку взять из услуге, где предоплата уже описана, — иначе на разных экранах появятся разные подписи для одного и того же признака. | |
| OQ3.2-5 | Код FR3.2-3 | Требование говорит: по «Все (N)» открывается нижняя панель с названием сферы и полным списком её площадок. В коде нижней панели нет: список разворачивается прямо на вкладке, а вместо «Все (N)» появляется «Свернуть». Хуже того, разворот общий для всех сфер сразу — признак «развёрнуто» один на весь экран, поэтому нажатие в одной сфере разворачивает и все остальные, а повторный запрос уходит с количеством, равным максимуму по всем сферам. \ for_you_screen.dart:620-634 (общий признак разворота и обработчик), :739-741 («Свернуть» вместо панели), hot_deals_bloc.dart:107-155 (разворот — один флаг состояния и общий запрос по максимальному количеству) | Разработка | Open | Сначала подтвердить у бизнеса форму: нижняя панель по FR3.2-3 или разворот на месте (сейчас в коде второе, и оно не обязательно хуже — не уводит пользователя со вкладки). После ответа завести тикет в Bitrix: либо сделать панель, либо переписать требование под разворот. В любом случае состояние должно быть по каждой сфере отдельно — текущее общее поведение выглядит как ошибка при любом варианте. | |
| OQ3.2-6 | Код FR3.2-4 | Что нашли: переход в карточку площадки работает, но устроен обходным путём и теряет сферу. Вместо прямого открытия экрана приложение переключает нижнюю навигацию на вкладку «Поиск», затем через отложенные вызовы достаёт оттуда параметры поиска и уже потом открывает карточку. Пользователь при этом уходит с вкладки «Для вас»: вернувшись назад, он окажется в «Поиске». Вдобавок при сборке площадки не проставляется сфера — она приходит с сервера на уровне группы, но до карточки не доходит, поэтому в параметры поиска уезжает пустое значение. В BRD ни того, ни другого нет. \ for_you_screen.dart:28-70 (переключение вкладки, отложенные переходы, передача сферы в параметры поиска), :837-850 (сфера при сборке площадки не заполняется), :885-888 (вызов при нажатии на карточку) | Разработка | Open | Завести тикет в Bitrix: пробрасывать идентификатор сферы из группы в карточку — без него параметры поиска инициализируются пустыми, и это тихо влияет на то, что пользователь увидит в карточке. Отдельно уточнить у бизнеса ожидаемое поведение кнопки «Назад» из карточки, открытой с «Горящих»: возврат на «Для вас» (ожидаемо для пользователя) или на «Поиск» (как сейчас). Отложенные вызовы с нулевой задержкой стоит убрать в любом случае — они делают переход зависимым от порядка перерисовки. | |
| OQ3.2-7 | Код FR3.2-6 | Требование говорит: во время загрузки показываются плейсхолдеры названия сферы и карточек площадок. В коде плейсхолдеры есть только у карточек — рисуется пять пустых карточек подряд, без заголовков сфер. Структура «сфера → карточки» во время загрузки не угадывается. \ for_you_screen.dart:561-568 (скелетон из пяти карточек без заголовков) | Разработка | Open | Завести тикет в Bitrix: добавить в состояние загрузки плейсхолдер названия сферы, чтобы скелетон повторял реальную структуру списка. Требование низкого веса (2), поэтому его разумно взять в один заход с OQ3.2-2 — обе правки лежат в одном месте. | |
| OQ3.2-8 | Код FR3.2-2 | Проблема: рейтинг площадки в карточке обрезается до целого числа. С сервера он приходит дробным, но при сборке карточки приводится к целому, поэтому вместо «4.8» пользователь видит «4». Для горящих предложений это заметно: рейтинг — один из немногих признаков, по которым площадки в списке различаются. \ hot_deals_response.dart:40 (рейтинг приходит дробным), for_you_screen.dart:842 (приведение к целому при сборке карточки), room_card.dart:480 (вывод рейтинга) | Разработка | Open | Завести тикет в Bitrix: передавать рейтинг в карточку без потери дробной части. Уточните у бизнеса формат вывода — один знак после запятой, как в поиске, или округление до половины балла; в остальном продуктовых решений не требуется. | |
| OQ3.2-9 | Код FR3.2-3 | Проблема: после обновления списка жестом «потянуть вниз» ломается сворачивание. При обновлении приложение перезаписывает состояние вкладки и теряет сохранённую свёрнутую копию списка, а «Свернуть» подставляет именно её. В результате последовательность «обновить → Все (N) → Свернуть» оставляет пользователя с пустым экраном и текстом «Горящих предложений пока нет», хотя предложения есть. Помогает только повторное обновление. Оговорка: пока не исправлен OQ3.2-2, кнопка «Все (N)» почти не появляется, поэтому на практике сценарий воспроизводится редко — но станет массовым сразу после той правки. \ hot_deals_bloc.dart:208-213 (обновление не сохраняет свёрнутую копию), :172-176 (сворачивание подставляет пустую копию), for_you_screen.dart:570-577 (пустой список показывает пустое состояние) | Разработка | Open | Завести тикет в Bitrix: сохранять свёрнутую копию списка и при обновлении. Правка небольшая, и её разумно делать в одном тикете с OQ3.2-2 — иначе включение кнопки «Все (N)» сразу вытащит наружу этот дефект. | |
| OQ3.2-10 | Код (обратный проход) | Что нашли: список горящих предложений строится по выбранному городу — запрос уходит с идентификатором города, и площадки других городов во вкладку не попадают. Если город по какой-то причине не определён, вкладка показывает не пустое состояние, а ошибку загрузки с кнопкой «Повторить». В BRD город не упомянут ни в требованиях, ни в дополнительных состояниях. \ hot_deals_repository.dart:33-43 (город в запросе, выход без данных при его отсутствии), for_you_screen.dart:639-677 (состояние ошибки) | Бизнес | Open | Дописать в раздел, что вкладка показывает предложения выбранного города, и определить поведение при неопределённом городе: сейчас это ошибка загрузки, а логичнее — предложить выбрать город. Заодно стоит проверить, откуда город берётся на этой вкладке: на «Горящих» переключателя города нет, он приходит из Mobile 2.2 Параметры поиска. | |
| OQ3.2-11 | Код (обратный проход) | Проблема: запрос горящих предложений отправляется из метода отрисовки экрана, а не один раз при его открытии. Это значит, что любая перерисовка — переключение вкладки, возврат из карточки площадки, изменение избранного — снова уводит вкладку в состояние загрузки и сбрасывает уже развёрнутые сферы. Лишний трафик здесь вторичен, главное — пользователь теряет своё место в списке. \ for_you_screen.dart:109-112 (события загрузки отправляются внутри построения разметки) | Разработка | Open | Завести тикет в Bitrix: загружать данные один раз при открытии вкладки, а не при каждой перерисовке. Правка техническая, продуктовых решений не требует, но заметно влияет на ощущение от вкладки — и её стоит сделать до OQ3.2-5, иначе поведение разворота будет невозможно нормально проверить. | |
| OQ3.2-12 | Код (обратный проход) | Что нашли: в файле вкладки лежит мёртвый код — класс списка с захардкоженными сферами «Репетиционные базы» и «Студии звукозаписи», выдуманными счётчиками (7 и 3) и карточками-заглушками с ценой 1500 ₽ и скидкой −50 %. Он занимает больше сотни строк, никуда не подключён, но при беглом чтении выглядит как рабочая реализация вкладки. Рядом лежит целый файл-предшественник экрана, помеченный комментарием «активная версия — в соседнем файле». Там же по соседству в рабочем коде зашит адрес продового файлового хранилища в обход настроек окружения. \ for_you_screen.dart:895-1011 (мёртвый класс с заглушками), for_you_screen_original.dart:32 (пометка о неактивности файла), for_you_screen.dart:819 (зашитый адрес хранилища) | Разработка | Open | Завести тикет в Bitrix (техуборка): удалить неиспользуемый класс и файл-предшественник, а адрес хранилища взять из конфигурации окружения. Продуктовых решений не требуется. Пока эти файлы лежат в репозитории, любая следующая сверка и любой новый разработчик рискуют читать не тот код. | |
| OQ3.2-13 | Код FR3.2-2, FR3.2-5 | Что подтверждено: основа вкладки соответствует требованиям. Площадки приходят сгруппированными по сферам и только с активной скидкой — отбор и группировку делает бэкенд (SearchHotAllSpheresMobile в сервисе партнёрских зон), клиент выводит группы как есть с названием сферы. Карточка показывает избранное, размер скидки с иконкой «горит», процент оплаты М-баллами, названия площадки и объекта, площадь, расстояние, метро и доступный интервал. Пустое состояние совпадает с FR3.2-5 дословно: «Горящих предложений пока нет» и «Добавьте площадку и они появятся здесь». \ hot_deals_repository.dart:45-49 (запрос к бэкенду), for_you_screen.dart:613-637 и :717-721 (группы и названия сфер), :872-884 (состав карточки), :572-577 (пустое состояние) | — | Подтверждено | Расхождения нет. Отдельно отметим: подпись пустого состояния «Добавьте площадку и они появятся здесь» дословно повторяет подпись из «Избранного» и для горящих предложений читается странно — площадки туда попадают не действием пользователя, а появлением скидки. Требование сформулировано именно так, поэтому расхождением это не считаем, но текст стоит перепроверить при следующей правке раздела. | — |