Направление работ: Mobile Код раздела: 5.9 Раздел: Профиль > Ограничения Статус: черновик Ответственный: Панкова Л.А. Версия: 0.1 Обновлено: 13.07.26


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

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

Интерфейс показывает список ограничений по партнерским зонам, причину и сумму сбора, если она начислена, а также доступные действия с ограничением.

Раздел зависит от Back: 1.3.2 Характеристики клиента. Оспаривание ограничения описывается в соседних разделах Mobile 5.9.1 и 5.9.2.

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

Ограничение — примененная партнером характеристика клиента, которая изменяет доступность бронирования или условия оказания услуг в конкретной партнерской зоне.

Блокировка клиента — ограничение, при котором клиент не может совершать заказы в конкретной партнерской зоне.

Сбор — начисленная клиенту сумма, связанная с нарушением условий партнера или заказа.

Карточка ограничения — представление ограничения в списке с данными партнера, причиной, суммой сбора и доступными действиями.

3. Scope

Входит

S1: Ограничения

S2: Виды карточек ограничений

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

Не входит

4. BR

Указаны в пункте 4 раздела Back: 1.3.2 Характеристики клиента.

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

IDСценарийФункциональное требованиеBRВесСтатус
S1: FR5.9-1Клиент открывает экран ограниченийИнтерфейс открывает экран «Ограничения» и показывает список действующих ограничений клиента.1Реализовано · OQ5.9-12
S1: FR5.9-2Клиент просматривает ограничениеИнтерфейс показывает в карточке ограничения партнера, площадку или область действия ограничения, дату и время применения ограничения, причину ограничения и сумму сбора, если она начислена.1Частично · OQ5.9-2
S2: FR5.9-3Клиент просматривает сбор, установленный вручнуюИнтерфейс показывает карточку с фотографией площадки, причиной «Установлен в ручном режиме сотрудником компании», суммой сбора и действиями «Оспорить» и «Оплатить».1Частично · OQ5.9-3
S2: FR5.9-4Клиент просматривает сбор, начисленный автоматическиИнтерфейс показывает карточку с фотографией площадки, причиной «Нарушение правил отмены заказа», суммой сбора и действиями «Оспорить» и «Оплатить».1Частично · OQ5.9-3
S2: FR5.9-5Клиент просматривает автоматическую блокировкуИнтерфейс показывает карточку с логотипом партнерской зоны, областью действия «Все объекты», причиной «Повторное нарушение правил отмены заказа», суммой сбора и действиями «Оспорить» и «Оплатить».1Частично · OQ5.9-4
S2: FR5.9-6Клиент просматривает блокировку без указанной причиныИнтерфейс показывает карточку с логотипом партнерской зоны, областью действия «Все объекты», текстом «Блокировка по инициативе площадки» и пояснением «Причина: не указана», если партнер не указал причину блокировки.1Не реализовано · OQ5.9-5
S2: FR5.9-7Клиент выбирает действие с ограничениемИнтерфейс позволяет перейти к оспариванию ограничения по действию «Оспорить» или начать оплату начисленного сбора по действию «Оплатить».1Частично · OQ5.9-6
S3: FR5.9-8Клиент открывает информацию об ограниченияхИнтерфейс по информационному действию открывает панель «Информация о мерах, принятых партнерами сервиса Март, вследствие нарушения правил оказания услуг» и поясняет последствия ограничений: «Вы заблокированы, площадка недоступна для бронирования», «Вам начислен сбор. Стоимость бронируемых услуг у данного партнера увеличена согласно сумме сбора» и «Услуги данного партнера предоставляются только по предоплате».2Реализовано · OQ5.9-7
S3: FR5.9-9Загружается список ограниченийИнтерфейс показывает состояние загрузки карточек до получения списка ограничений.2Не реализовано · OQ5.9-9
S3: FR5.9-10У клиента нет ограниченийИнтерфейс показывает пустое состояние с сообщениями «У вас нет ограничений» и «Вам доступно бронирование у всех партнеров сервиса».1Реализовано · OQ5.9-13

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

IDИсточникВопросКомуСтатус
OQ5.9-1

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

Пин: BRD 5.9 v0.1 · repo booking.mobile.flutter (Flutter/Dart) · commit dad0c65 / ветка dev · 2026-07-15 · якорь lib/src/feature/profile_page/forfeits/ Сводка: 12 вопросов — Open 7 (бизнесу 6 · разработке 1) · Закрывает PM 3 (разработка) · Подтверждено 2 · отрезано находок обратного прохода 3 (отладочные print, закомментированный старый блок оплаты, небезопасный каст состояния — как несущественные) Маршрутизация без сверки с гайдбуком (гайдбук на вход не передан). Адресаты: бизнес → Бизнес (Герман), программное → Разработка (Владислав).

IDИсточникВопросКомуСтатусРекомендации
OQ5.9-2Код FR5.9-2Требование говорит: в карточке показывается дата и время применения ограничения. В коде карточка выводит вместо этого период брони заказа («от {начало}–{конец}»), а при отсутствии заказа — текст «Время заказа неизвестно»; поле даты создания ограничения в данных есть, но на экран не выводится вообще.
forfeit_tile.dart:175, forfeit_tile.dart:187, forfeit_model.dart:49
Разработка (Владислав)Open(А) выводить в карточке дату/время применения ограничения (поле createdAt), как требует BRD — рекомендуется, требование однозначно; (Б) если период брони показывается намеренно (полезнее клиенту) — зафиксировать это в BRD.
OQ5.9-3Код FR5.9-3, FR5.9-4Требование говорит: для сбора вручную причина «Установлен в ручном режиме сотрудником компании», для авто-сбора — «Нарушение правил отмены заказа»; предусмотрены разные виды карточек. В коде карточка одна универсальная, а причина берётся из фиксированного перечня, где таких формулировок нет — доступны только «Нормальная отмена без штрафа», «Поздняя отмена, ожидание/подтверждено/оплачено», «Штраф отменён/отклонён», «Причина штрафа неизвестна».
forfeit_model.dart:107-116, forfeit_tile.dart:216
Бизнес (Герман)Open(А) согласовать перечень причин с BRD и завести варианты карточек под виды ограничений — рекомендуется, если точная формулировка причины важна клиенту; (Б) привести BRD к фактическому перечню причин из данных. Разблокирует OQ5.9-4 и OQ5.9-5.
OQ5.9-4Код FR5.9-5Требование говорит: авто-блокировка показывается с логотипом партнёрской зоны, областью действия «Все объекты» и причиной «Повторное нарушение правил отмены заказа». В коде факт блокировки отражается только цветной иконкой (флаг «ban»); отдельного логотипа партнёрской зоны нет (используется то же фото площадки из файлов, при отсутствии — иконка «нет фото»); текста «Все объекты» нет нигде в приложении; такой причины в перечне нет.
forfeit_model.dart:23, forfeit_tile.dart:63-81, forfeit_tile.dart:153; «Все объекты» — не найдено за обход lib/src
Бизнес (Герман)Open(А) реализовать вид карточки блокировки: логотип зоны, область «Все объекты», отдельная причина — рекомендуется для соответствия BRD; (Б) упростить BRD, если различие «фото/логотип» и «Все объекты» на данном этапе не нужно. Связать с OQ5.9-3.
OQ5.9-5Код FR5.9-6Требование говорит: если партнёр не указал причину блокировки — показывается текст «Блокировка по инициативе площадки» и пояснение «Причина: не указана». В коде этих текстов нет: для неизвестной причины перечень отдаёт «Причина штрафа неизвестна», а формулировок «Блокировка по инициативе площадки» и «Причина: не указана» нет нигде.
forfeit_model.dart:116; обе строки — не найдено за обход lib/src
Бизнес (Герман)Open(А) добавить обработку блокировки без причины с текстами из BRD — рекомендуется, поведение полностью отсутствует; (Б) отказаться от отдельного текста и оставить «Причина штрафа неизвестна», обновив BRD. Связать с OQ5.9-3.
OQ5.9-6Код FR5.9-7Требование говорит: по действию «Оспорить» — переход к оспариванию ограничения (Mobile 5.9.1), по «Оплатить» — начало оплаты сбора. В коде «Оплатить» реализовано (создаётся ссылка на оплату и открывается во внешнем окне), а «Оспорить» открывает не экран оспаривания, а создание письма на support@musbooking.com с заранее подставленной темой.
forfeit_tile.dart:250-252 (письмо), forfeit_tile.dart:339-346 + forfeit_repository.dart:39-65 (оплата)
Бизнес (Герман)Open(А) заменить письмо на переход в экран оспаривания 5.9.1, когда он готов — рекомендуется, соответствует BRD; (Б) зафиксировать письмо в поддержку как штатный канал оспаривания в BRD 5.9/5.9.1.
OQ5.9-7Код FR5.9-8Требование говорит: заголовок информационной панели — «…принятых партнерами сервиса Март…». В коде панель и все три пояснения реализованы и совпадают с BRD, но в заголовке используется название сервиса «MUSbooking», а не «Март».
forfeit_screen.dart:68 (заголовок); forfeit_screen.dart:89, 110, 131 (пояснения совпадают)
Бизнес (Герман)Open(А) если сервис переименован в «Март» — обновить название в приложении (это часть ребрендинга) — рекомендуется, если «Март» финальное имя; (Б) если «Март» — рабочее имя в BRD, оставить «MUSbooking» и поправить BRD.
OQ5.9-8Код вне BRDЧто нашли: карточка ограничения показывает в правом верхнем углу три цветные иконки-индикатора — «предоплата», «сбор» и «блокировка», подсвеченные активным цветом по соответствующим признакам ограничения. В BRD (виды карточек 5.9-3…5.9-6) этот визуальный язык не описан.
forfeit_tile.dart:122-166
Бизнес (Герман)Open(А) описать индикаторы в BRD как часть карточки — рекомендуется, они несут смысл для клиента; (Б) признать их лишними и убрать, если тип ограничения передаётся текстом.
OQ5.9-9Код FR5.9-9Требование говорит: до получения списка показывается состояние загрузки карточек. В коде во время загрузки экран пустой (возвращается пустой виджет); заготовка индикатора загрузки объявлена, но нигде не вызывается (мёртвый код).
forfeit_screen.dart:156-159, forfeit_screen.dart:40-53
Разработка (Владислав)Закрывает PMЗакрываю сам: добавить скелетон/индикатор загрузки карточек в состояние loading (задействовать существующую заготовку либо скелетон-плейсхолдеры) → тикет в Bitrix.
OQ5.9-10Код вне BRDПроблема: перед оплатой сбора код проверяет наличие email у клиента и показывает окно ввода контактов, но затем безусловно выставляет «оплата разрешена» (canPay = true), из-за чего результат проверки игнорируется — похоже на незавершённую логику.
forfeit_tile.dart:306-336
Разработка (Владислав)Закрывает PMЗакрываю сам: убрать принудительный canPay = true (строка 336) либо осознанно оформить требование подтверждённого email перед оплатой → тикет в Bitrix.
OQ5.9-11Код вне BRDПроблема: состояние ошибки экрана отрисовывает экран ошибки с пустым текстом сообщения (errorText: ""), поэтому при сбое загрузки клиент не видит пояснения, что произошло. В BRD состояние ошибки как FR не описано, но это одно из состояний экрана.
forfeit_screen.dart:196-198
Разработка (Владислав)Закрывает PMЗакрываю сам: передавать в экран ошибки понятный текст (напр. «Не удалось загрузить ограничения, повторите позже») → тикет в Bitrix. При необходимости согласовать текст с бизнесом.
OQ5.9-12Код FR5.9-1Что подтверждено: экран «Ограничения» открывается из профиля, зарегистрирован в роутере, при открытии грузит список через метод API ClientsService.GetAllForfeitsByClientMobile и отображает карточки списком. Оговорка: отбор именно «действующих» ограничений выполняется на бэкенде (метод отдаёт все сборы клиента) и из Flutter-кода не проверяется.
forfeit_screen.dart:22-27, forfeit_screen.dart:56-58, app_router.dart:366, profile_screen.dart:536-539, forfeit_repository.dart:25-37
ПодтвержденоРасхождения нет. Отбор «действующих» — на стороне бэкенда, вне зоны этого раздела.
OQ5.9-13Код FR5.9-10Что подтверждено: пустое состояние показывается с точными текстами BRD — «У вас нет ограничений» и «Вам доступно бронирование у всех партнеров сервиса», с иконкой и pull-to-refresh.
forfeit_screen.dart:161-169
ПодтвержденоРасхождения нет.