BRD Mobile 4.1.2 Мои заказы > Список текущих заказов > Перенос и отмена заказа

Направление работ: Mobile Код раздела: 4.1.2 Раздел: Мои заказы > Список текущих заказов > Перенос и отмена заказа Статус: Готов Ответственный: Панкова Л.А. Версия: 0.1 Обновлено: 17.08.26


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

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

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

Проверка возможности переноса или отмены, перерасчет заказа, возврат оплаты, начисление сбора и уведомление партнера выполняются системой по правилам связанных Back BRD. Интерфейс передает решение клиента и показывает полученный результат.

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

Экран «Перенос и отмена заказа» — набор экранов и диалогов мобильного приложения для переноса или отмены активного бронирования.

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

Бесплатная отмена — отмена заказа до установленного площадкой дедлайна без применения последствий за нарушение правил отмены.

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

Возврат средств — возврат проведенной оплаты после отмены заказа в предусмотренном правилами случае.

3. Scope

Входит

S1: Начало переноса и подтверждение перехода к выбору нового времени

S2: Выбор новых таймслотов и просмотр условий измененного заказа

S3: Подтверждение конфликтов, перерасчет и завершение переноса

S4: Подтверждение отмены с учетом срока бесплатной отмены и состояния оплаты

S5: Просмотр результата отмены и переход к архивному заказу

Не входит

  • Mobile: 2.4.1 Выбор таймслотов — базовые правила отображения и выбора доступного времени.
  • Mobile: 4.1.1 Информация о текущем заказе — просмотр состава активного заказа и вход в сценарии переноса и отмены.
  • Mobile: 4.2 Список архивных заказов — просмотр отмененного заказа после завершения сценария.
  • Проверка доступности времени, применение правил создания и отмены заказа, перерасчет стоимости и М-баллов, проведение возврата, начисление сбора и уведомление партнера на стороне системы.

4. BR

Указаны в пункте 4 разделов Back: 2.4.1 Условия создания, Back: 2.4.3 Правила отмены, Back: 3.2 Процессинг заказов, Back: 3.2.1 Сборы за заказ и Back: 5.3 Сценарии возврата.

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

FR — functional requirements, что интерфейс должен уметь делать по определенному UC.

IDСценарийФункциональное требованиеBRВесСтатус
S1: FR4.1.2-1Клиент просматривает информацию о текущем заказеИнтерфейс позволяет начать перенос только для заказа без проведенных оплат. Для полностью или частично оплаченного заказа действие «Перенести» недоступно. Если перенос доступен и клиент нажимает «Перенести», интерфейс открывает диалог с заголовком «Вы уверены, что хотите перенести заказ?» и предупреждением «Стоимость заказа может измениться».1Частично OQ4.1.2-4 OQ4.1.2-22
S1: FR4.1.2-2Клиент начинает перенос после истечения срока бесплатной отменыВместо общего подтверждения интерфейс открывает отдельный диалог с заголовком «Вы уверены, что хотите перенести заказ?», сообщением «Нарушены правила отмены. В заказе будет учтен сбор: {сумма сбора}» и действиями «Не переносить» и «Да».1Частично OQ4.1.2-1 OQ4.1.2-5
S1: FR4.1.2-3Клиент нажимает «Не переносить»Интерфейс закрывает диалог без изменения заказа и возвращает клиента к информации о текущем заказе.1Реализовано OQ4.1.2-22
S1: FR4.1.2-4Клиент нажимает «Да»Интерфейс закрывает диалог и открывает экран «Выберите время» для текущей площадки и объекта.1Реализовано OQ4.1.2-22
S2: FR4.1.2-5Экран выбора нового времени загружаетсяДо получения доступных таймслотов интерфейс показывает skeleton-состояние групп дат и времени.2Реализовано
S2: FR4.1.2-6Клиент выбирает новое времяИнтерфейс показывает даты, доступные интервалы и стоимость таймслотов и позволяет выбрать последовательный временной интервал по правилам раздела Mobile: 2.4.1 Выбор таймслотов. Недоступные таймслоты нельзя выбрать.2Реализовано
S2: FR4.1.2-7Клиент просматривает другие датыИнтерфейс позволяет перейти к следующей неделе и выбрать доступные таймслоты другой даты.1Реализовано
S2: FR4.1.2-8Клиент выбрал хотя бы один таймслотИнтерфейс показывает выбранные дату, время и длительность, условие бесплатной отмены, стоимость следующего часа с учетом возможной скидки и итоговую стоимость измененного заказа. Если бесплатная отмена доступна, отображается ее дедлайн; иначе — сообщение «Бесплатная отмена недоступна».2Частично OQ4.1.2-6
S2: FR4.1.2-9Клиент нажимает «Очистить»Интерфейс снимает выбор всех таймслотов и возвращает нижнюю панель в исходное состояние.1Реализовано
S2: FR4.1.2-10Клиент нажимает «Продолжить»Если выбран корректный непрерывный интервал, интерфейс отправляет новые дату и время на проверку условий переноса. До выбора корректного интервала продолжение недоступно.1Частично OQ4.1.2-7
S2: FR4.1.2-11(на будущую реализацию) Клиент выбирает площадку перед выбором нового времениИнтерфейс дополнительно показывает горизонтальный список доступных площадок с изображением, названием объекта и ближайшим метро, а также сохраненную опцию количества человек. Выбор площадки обновляет набор доступных таймслотов.3Частично OQ4.1.2-8
S3: FR4.1.2-12Добавленные к заказу оборудование и промокод доступны в новое времяИнтерфейс подтверждает перенос без дополнительного предупреждения о составе заказа.1Реализовано OQ4.1.2-22
S3: FR4.1.2-13Добавленное оборудование недоступно в новое времяИнтерфейс показывает единый диалог подтверждения переноса с сообщением «Добавленное ранее оборудование недоступно в выбранное время» и действиями «Отменить» и «Перенести».1Реализовано OQ4.1.2-20
S3: FR4.1.2-14Добавленный промокод недоступен в новое времяИнтерфейс показывает единый диалог подтверждения переноса с сообщением «Добавленный ранее промокод недоступен в выбранное время» и действиями «Отменить» и «Перенести».1Реализовано OQ4.1.2-20
S3: FR4.1.2-15Оборудование и промокод одновременно недоступны в новое времяИнтерфейс показывает один общий диалог подтверждения переноса с сообщением «Добавленное ранее оборудование и промокод недоступны в выбранное время» и действиями «Отменить» и «Перенести».1Реализовано OQ4.1.2-20
S3: FR4.1.2-16Клиент нажимает «Отменить» в диалоге конфликтаИнтерфейс закрывает диалог, не изменяет заказ и возвращает клиента к выбору нового времени с сохраненными таймслотами.1Реализовано OQ4.1.2-22
S3: FR4.1.2-17Клиент подтверждает переносИнтерфейс отправляет запрос на перенос заказа. Недоступные в новое время оборудование и промокод исключаются из заказа, после чего интерфейс получает и показывает пересчитанные стоимость времени, дополнительные позиции, скидку, количество списываемых М-баллов, сбор за нарушение правил отмены при его наличии и итоговую стоимость. Сбор за нарушение правил отмены, примененный при переносе после истечения срока бесплатной отмены, включается в итоговую сумму перенесенного заказа.2Частично OQ4.1.2-1 OQ4.1.2-9 OQ4.1.2-10
S3: FR4.1.2-18Заказ успешно перенесенИнтерфейс показывает экран «Бронирование успешно перенесено» с новыми датой, временем и длительностью, актуальным условием бесплатной отмены и сообщением о том, что партнер уведомлен об изменениях.1Реализовано
S3: FR4.1.2-19Клиент выбирает ссылку на социальную сеть на экране успешного переносаИнтерфейс открывает выбранную социальную сеть МАРТ во внешнем приложении или браузере.2Реализовано
S3: FR4.1.2-20Клиент нажимает «Поделиться заказом»Интерфейс запускает системное действие «Поделиться» и передает сообщение: «Привет

Через МАРТ ({ссылка на сайт}) за нами забронировано время:

{день недели}, {день} {месяц}, {время}
{площадка}
{объект}

{адрес}
{метро}

{ссылка на видео «Как дойти»}

До встречи!».
1Не реализовано OQ4.1.2-11
S3: FR4.1.2-21Клиент нажимает «Перейти к заказу»Интерфейс открывает обновленный заказ в разделе Mobile: 4.1.1 Информация о текущем заказе.1Реализовано
S4: FR4.1.2-22Клиент нажимает «Отменить» в информации о текущем заказеИнтерфейс определяет доступность бесплатной отмены и состояние оплаты и открывает соответствующий диалог подтверждения.1Реализовано OQ4.1.2-21
S4: FR4.1.2-23Бесплатная отмена доступна, заказ не оплаченИнтерфейс показывает вопрос «Вы уверены, что хотите отменить заказ?» и действия «Не отменять» и «Да».1Реализовано OQ4.1.2-21
S4: FR4.1.2-24Бесплатная отмена доступна, заказ оплачен полностью или частичноИнтерфейс показывает вопрос «Вы уверены, что хотите отменить заказ?», уведомляет, что возврат проведенной оплаты будет зачислен в течение 5 рабочих дней, и показывает действия «Не отменять» и «Да».1Реализовано OQ4.1.2-3 OQ4.1.2-21
S4: FR4.1.2-25Бесплатная отмена недоступна, заказ не оплаченИнтерфейс показывает вопрос «Вы уверены, что хотите отменить заказ?», предупреждает, что срок бесплатной отмены истек и клиенту будет начислен сбор, и показывает действия «Не отменять» и «Да».1Частично OQ4.1.2-12
S4: FR4.1.2-26Бесплатная отмена недоступна, заказ оплачен полностью или частичноИнтерфейс показывает вопрос «Вы уверены, что хотите отменить заказ?», предупреждает, что срок бесплатной отмены истек, вся проведенная оплата будет удержана и клиенту будет начислен сбор, и показывает действия «Не отменять» и «Да».1Частично OQ4.1.2-3 OQ4.1.2-13
S4: FR4.1.2-27Клиент нажимает «Не отменять»Интерфейс закрывает диалог без изменения заказа и возвращает клиента к информации о текущем заказе.1Реализовано OQ4.1.2-21
S4: FR4.1.2-28Клиент нажимает «Да»Интерфейс отправляет запрос на отмену заказа с подтвержденными клиентом последствиями.1Частично OQ4.1.2-14
S5: FR4.1.2-29Заказ отменен без нарушения правил отменыИнтерфейс показывает экран «Заказ успешно отменен» и действие «Хорошо». Для полностью или частично оплаченного заказа возврат проведенной оплаты выполняется в течение 5 рабочих дней.1Частично OQ4.1.2-15
S5: FR4.1.2-30Заказ отменен после истечения срока бесплатной отменыИнтерфейс показывает экран «Заказ отменен», сообщение «Нарушены правила отмены» и сумму начисленного сбора, полученную от системы.1Частично OQ4.1.2-16
S5: FR4.1.2-31Клиент нажимает «Хорошо» на экране результата отменыИнтерфейс завершает сценарий и открывает раздел Mobile: 4.2 Список архивных заказов, в котором отмененный заказ доступен в списке.1Не реализовано OQ4.1.2-17

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

IDИсточникВопросКомуСтатусРекомендацииИтоговое решение
OQ4.1.2-1Бизнес-правила / Figma / Back: 3.2 / FR4.1.2-2, FR4.1.2-17При переносе после истечения срока бесплатной отмены сам перенос выполняется без сбора, а платной становится только последующая отмена, как указано в макете, или сбор за нарушение правил отмены должен быть включен уже в перенос по BR3.2-10?Продукт / BackOpenПеренос выполняется по правилам Back: сбор за нарушение правил отмены включается в итоговую сумму перенесенного заказа. Перед продолжением интерфейс показывает отдельный диалог «Вы уверены, что хотите перенести заказ?» с сообщением «Нарушены правила отмены. В заказе будет учтен сбор: {сумма сбора}». Решение учтено в FR4.1.2-2 и FR4.1.2-17.
OQ4.1.2-3Бизнес-правила / Back: 3.2 / FR4.1.2-22–FR4.1.2-26К какому сценарию отмены относится частично оплаченный заказ: к неоплаченному или оплаченному? При отмене после истечения срока бесплатной отмены удерживаются все проведенные платежи по такому заказу?Продукт / BackOpenСценарии отмены оплаченного заказа применяются как к полностью, так и к частично оплаченному заказу. Если срок бесплатной отмены истек, удерживается вся проведенная оплата и начисляется сбор. Решение учтено в FR4.1.2-24 и FR4.1.2-26; формулировка диалога сверена с макетом Figma.
OQ4.1.2-4FR4.1.2-1 / conditions_btns_util.dartТребование говорит: перенос доступен для любого заказа без проведённых оплат. В коде кнопка «Перенести» дополнительно скрывается, если у заказа не разрешена бесплатная отмена (freeCancellationAllowed == false) — такой заказ перенести нельзя вообще, даже будучи неоплаченным \ lib/src/feature/orders_tab/utils/conditions_btns_util.dart:91-109 (рядом стоит FIXME разработчика «Возможно добавить сравнение даты отмены с текущей», т.е. правило не финализировано)БизнесOpenПодтвердить правило: если площадка не даёт бесплатную отмену, перенос заказа запрещён совсем или разрешён со сбором? Если запрет не задумывался — снять условие !isFreeCancellation из needMoveBtn и описать в FR4.1.2-1 явное условие доступности.Вопрос к бизнесу.
OQ4.1.2-5FR4.1.2-2 / order_room_screen.dartТребование говорит: при переносе после истечения срока бесплатной отмены показывается отдельный диалог с текстом «Нарушены правила отмены. В заказе будет учтен сбор: {сумма сбора}». В коде диалог тот же самый, меняется только подпись: вместо суммы сбора выводится «Стоимость заказа может измениться. Отмена после переноса будет платной» — сумма сбора клиенту не показывается, и смысл текста обратный (сбор относится к будущей отмене, а не к переносу) \ lib/src/feature/orders_tab/order_room/order_room_screen.dart:367-395БизнесOpenСвязано с OQ4.1.2-1. После решения по OQ4.1.2-1 привести текст диалога к утверждённому: если сбор берётся при переносе — выводить {сумма сбора} (поле forfeitSum уже есть в order_screen_dto.dart:98); если нет — переформулировать FR4.1.2-2 под фактическую логику.Вопрос к бизнесу.
OQ4.1.2-6FR4.1.2-8 / time_widget_screen.dartТребование говорит: после выбора таймслота нижняя панель показывает дату, время и длительность, условие бесплатной отмены (дедлайн или «Бесплатная отмена недоступна»), стоимость следующего часа и итоговую стоимость. В коде панель показывает только строку «Итого: {сумма} ({N} ч)» и две кнопки; ни выбранной даты и времени, ни условия бесплатной отмены на экране выбора нового времени нет \ lib/src/feature/time_widget/widget/time_widget_screen.dart:1590-1606, длительность и сумма формируются в lib/src/feature/widgets/time_choose_widgets/date_time_sections_manager.dart:862, 867-894; строк про бесплатную отмену в этом экране нет (поиск по «Бесплатная отмена» даёт только экран заказа, экран результата и плитку списка)РазработкаOpenДополнить нижнюю панель выбранной датой/временем и блоком бесплатной отмены (данные уже есть: freeCancellationAllowed / freeCancellationDeadline в order_screen_dto.dart:83-84, форматтер — result_change_screen.dart:35-43). Цена слота с учётом скидки сейчас показывается только на плитках таймслотов (date_time_sections_manager.dart:666-670) — уточнить у бизнеса, достаточно ли этого для «стоимости следующего часа».Данные есть, но не полные, да и не в том месте. Надо переделывать.
OQ4.1.2-7FR4.1.2-10 / time_widget_screen.dartТребование говорит: клиент нажимает «Продолжить». В коде в сценарии переноса кнопка называется «Перенести» (в сценарии создания — «Создать»), при этом при отсутствии конфликтов нажатие сразу выполняет перенос без ещё одного подтверждения \ lib/src/feature/time_widget/widget/time_widget_screen.dart:1663-1667, ветка без диалога — lib/src/feature/widgets/time_choose_widgets/date_time_sections_manager.dart:472-474, 486, 511-515. Блокировка до корректного интервала работает: isValid гасит кнопку (time_widget_screen.dart:1638-1658), валидность считается по forceMultipleHours (date_time_sections_manager.dart:896-903)БизнесOpenПодтвердить надпись на кнопке. Рекомендация: оставить «Перенести» как более точную (действие финальное, отдельного подтверждения дальше нет) и поправить формулировку FR4.1.2-10; либо вернуть «Продолжить», если по макету предполагался промежуточный шаг.Вопрос к бизнесу. Я бы оставил так.
OQ4.1.2-8FR4.1.2-11 / time_widget_screen.dartЧто нашли: требование помечено «на будущую реализацию», но горизонтальный список площадок уже выводится в экране выбора нового времени — и выводится с зашитыми в код данными: подзаголовок всегда «Music Loft Rehearsal», метро всегда «М. Бауманская», картинка тянется с захардкоженного хоста dev3.musbooking.com; нажатие на карточку отправляет только событие аналитики и не меняет набор таймслотов (// TODO: Add navigation or selection logic here if needed) \ lib/src/feature/time_widget/widget/time_widget_screen.dart:1025-1042, подключение секции — lib/src/feature/widgets/time_choose_widgets/date_time_sections_manager.dart:327-330 и в skeleton 220. Сохранённая опция «количество человек» (PeopleOptionsSection) закомментирована — date_time_sections_manager.dart:225-228, 336-339РазработкаOpenДо полноценной реализации FR4.1.2-11 скрыть RoomSelectionSection в сценарии переноса: сейчас клиенту в проде видны чужие/фиктивные название и метро. Либо реализовать выбор площадки целиком (перезапрос таймслотов при выборе) и снять пометку «на будущую реализацию».на будущее (нет апи)
OQ4.1.2-9FR4.1.2-17 / change_time_order_cubit.dartТребование говорит: после подтверждения переноса интерфейс получает и показывает пересчитанные стоимость времени, позиции, скидку, М-баллы, сбор и итоговую стоимость. В коде ответ UpdateOrderMobile не разбирается — из него читается только список ошибок, метод возвращает true/false, а пересчитанные суммы отбрасываются \ lib/src/core/components/repositories/order_service/orders_service_repository.dart:199-220. Экран успеха показывает только новые дату/время и условие бесплатной отмены (lib/src/feature/orders_tab/change_time_screens/cubit/result_change_screen.dart:62-128); пересчитанные суммы клиент увидит лишь вернувшись в заказ, где они берутся отдельным перезапросом и calcMobile (order_room_screen.dart:451-462, order_room/cubit/order_room_cubit.dart:118-125, 307-309). Исключение недоступных позиций и промокода из заказа при переносе реализовано \ change_time_order_cubit.dart:135-136, 141-157РазработкаOpenЛибо показывать пересчитанный состав заказа прямо в сценарии переноса (для этого разобрать Order из ответа UpdateOrderMobile, данные уже приходят), либо согласовать с бизнесом упрощённый экран успеха и переписать FR4.1.2-17 под «клиент видит пересчёт в карточке заказа».исправить
OQ4.1.2-10FR4.1.2-17 / date_time_sections_manager.dartЧто нашли: неуспешный перенос никак не сообщается клиенту. При updateOrder() == false (в т.ч. бизнес-ошибка бэкенда вида «нет цены на слот») модалка выбора времени просто закрывается с результатом false, вызывающий код проверяет if (res == true) и молча ничего не делает — клиент возвращается в заказ со старым временем без единого сообщения \ lib/src/feature/widgets/time_choose_widgets/date_time_sections_manager.dart:511-537, lib/src/feature/orders_tab/change_time_screens/change_time_order_main.dart:44-46, lib/src/feature/orders_tab/order_room/order_room_screen.dart:447-481 (рядом FIXME «Внутри потенциальные ошибки», date_time_sections_manager.dart:512)РазработкаOpenДобавить обработку ошибки переноса: показывать сообщение и оставлять клиента на экране выбора времени с сохранённым выбором. Заодно завести отдельное ФТ на негативный сценарий переноса — сейчас его в BRD нет.Добавить обработку ошибки переноса
OQ4.1.2-11FR4.1.2-20 / result_change_screen.dartТребование говорит: на экране успешного переноса есть «Поделиться заказом», запускающее системный шэринг с текстом-шаблоном. В коде такой кнопки нет: на экране успеха две кнопки — «Позвонить» и «Перейти к заказу» \ lib/src/feature/orders_tab/change_time_screens/cubit/result_change_screen.dart:197-282. Пакет share_plus в проекте подключён, но Share.share вызывается только в реферальной модалке профиля \ lib/src/feature/profile_page/profile/widget/invite_modal.dart:367, pubspec.yaml:121РазработкаOpenРеализовать кнопку «Поделиться заказом» на экране успешного переноса по шаблону из FR4.1.2-20 (механика уже есть в invite_modal.dart). Уточнить у бизнеса источник ссылок «Как дойти» и адреса/метро — этих полей в OrderScreenDto на экране результата не используется.Да, такого вообще нет. Нужен шаблон и чем собственно делиться? Где брать ссылку или тому подобное?
OQ4.1.2-12FR4.1.2-25 / cancel_dialog.dartЧто нашли: в диалоге отмены для неоплаченного заказа с истёкшим сроком бесплатной отмены текст заканчивается лишним вопросительным знаком: «Срок бесплатной отмены истек, вам будет начислен сбор?» — утверждение оформлено как вопрос \ lib/src/feature/orders_tab/order_room/widget/actullity/cancel_dialog.dart:92-99РазработкаOpenОпечатка: убрать «?» в конце строки. Проверить формулировку по макету Figma перед правкой.убрать «?»
OQ4.1.2-13FR4.1.2-26 / cancel_dialog.dartТребование говорит: для оплаченного заказа после истечения срока бесплатной отмены диалог предупреждает, что срок истёк, оплата будет удержана и клиенту будет начислен сбор. В коде в тексте только удержание: «Срок бесплатной отмены истек, оплаченная сумма будет удержана» — про сбор клиента не предупреждают \ lib/src/feature/orders_tab/order_room/widget/actullity/cancel_dialog.dart:150-157РазработкаOpenСвязано с OQ4.1.2-3. После подтверждения бизнесом (удерживается оплата И начисляется сбор) дописать упоминание сбора в текст диалога _yesPayFreeNo.дописать
OQ4.1.2-14FR4.1.2-28 / buttons_panel_widget.dartЧто нашли: неуспешная отмена заказа не показывается клиенту как ошибка — код бросает Exception("Ошибка отмены заказа Res == false") внутри колбэка whenComplete, вместо сообщения на экране; сам репозиторий любую ошибку gRPC гасит в false \ lib/src/feature/orders_tab/order_room/widget/actullity/buttons_panel_widget.dart:337-340, lib/src/feature/orders_tab/order_room/data/order_room_repository.dart:65-78РазработкаOpenЗаменить throw на пользовательское сообщение об ошибке отмены (диалог/снекбар) с возможностью повторить. Завести отдельное ФТ на негативный сценарий отмены — в BRD его нет.Заменить throw на пользовательское сообщение об ошибке отмены
OQ4.1.2-15FR4.1.2-29 / buttons_panel_widget.dartТребование говорит: после отмены без нарушения правил показывается экран «Заказ успешно отменен» с действием «Хорошо», а для оплаченного заказа — что возврат придёт в течение 5 рабочих дней. В коде это не экран, а маленький диалог, у которого заголовок всегда «Заказ отменен», а «Заказ успешно отменен» идёт мелким серым текстом ниже; про возврат за 5 рабочих дней в результате не сказано ничего (эта фраза есть только в диалоге-подтверждении до отмены) \ lib/src/feature/orders_tab/order_room/widget/actullity/buttons_panel_widget.dart:341-345, lib/src/feature/orders_tab/order_room/widget/actullity/cancel_dialog.dart:300-334, 312-319РазработкаOpenСогласовать с бизнесом форму результата (экран по макету или диалог) и добавить в результат для оплаченного заказа строку о возврате в течение 5 рабочих дней — признак оплаты уже известен на этом шаге (typeCancelDialogs, buttons_panel_widget.dart:274-282).Согласовать с бизнесом форму результата
OQ4.1.2-16FR4.1.2-30 / buttons_panel_widget.dartТребование говорит: экран результата показывает «Нарушены правила отмены» и сумму начисленного сбора, полученную от системы. В коде сумма берётся из клиентской модели заказа (orderScreenDto.forfeitSum), а не из ответа на отмену: в самом коде зафиксировано, что CancelOrderMobile возвращает пустое тело без данных о возврате и сборе. Кроме того для оплаченного заказа тот же forfeitSum подставляется в текст «Нарушены правила отмены, удержана сумма: {N}₽» — то есть сбор показывается как удержанная оплата \ lib/src/feature/orders_tab/order_room/widget/actullity/buttons_panel_widget.dart:63-79, 321-330РазработкаOpenУточнить с бэкендом, должен ли CancelOrderMobile возвращать фактические сбор и возврат; до этого — явно пометить суммы как расчётные на клиенте. Отдельно поправить текст для оплаченного заказа: удержанная оплата и сбор — разные величины.апи должна это возвращать но не возвращает)
OQ4.1.2-17FR4.1.2-31 / cancel_dialog.dartТребование говорит: «Хорошо» завершает сценарий и открывает раздел 4.2 «Список архивных заказов», где отменённый заказ уже виден. В коде «Хорошо» просто закрывает диалог (maybePop), никакой навигации в архив нет — клиент остаётся на карточке только что отменённого заказа \ lib/src/feature/orders_tab/order_room/widget/actullity/cancel_dialog.dart:356-362; переходов к архиву в сценарии отмены не найдено за обход (buttons_panel_widget.dart, cancel_dialog.dart, orders_navigation_screen.dart)РазработкаOpenДобавить по «Хорошо» закрытие карточки заказа и переход на вкладку архивных заказов с обновлением списка.Добавить по «Хорошо» закрытие карточки заказа и переход на вкладку архивных заказов
OQ4.1.2-18Обратный проход / result_change_screen.dartЧто нашли: на экране успешного переноса есть кнопка «Позвонить» партнёру (со звонком на первый телефон площадки и диалогом «Нет номера телефона», если телефон не указан) — в BRD этого действия нет \ lib/src/feature/orders_tab/change_time_screens/cubit/result_change_screen.dart:197-268БизнесOpenПодтвердить, что кнопка «Позвонить» на экране успешного переноса — намеренное поведение, и дописать её отдельным ФТ в S3; либо убрать из экрана.Вопрос к бизнесу.
OQ4.1.2-19Обратный проход / аналитикаЧто нашли: сценарии переноса и отмены полностью покрыты событиями аналитики AppMetrica (order_reschedule_started, order_reschedule_cancelled, order_reschedule_confirmed, order_reschedule_conflict_shown с типом конфликта, order_reschedule_completed с числом удалённых позиций и флагом снятого промокода, order_cancel_started, order_cancel_confirmed с признаками бесплатной отмены и оплаты, order_cancel_declined, order_cancel_completed с суммами возврата и сбора) — в BRD требований к аналитике нет \ lib/src/feature/orders_tab/order_room/order_room_screen.dart:356-358, 406-412, 420-426, lib/src/feature/widgets/time_choose_widgets/date_time_sections_manager.dart:477-482, 529-534, lib/src/feature/orders_tab/order_room/widget/actullity/buttons_panel_widget.dart:284-285, 302-309, cancel_dialog.dart:199-209БизнесOpenПодтвердить состав и названия событий как продуктовое требование и зафиксировать их отдельным пунктом BRD (иначе набор событий будет расходиться при доработках).ага
OQ4.1.2-20Подтверждение / FR4.1.2-13, FR4.1.2-14, FR4.1.2-15Что подтверждено: три текста диалога о конфликтах при переносе совпадают с BRD дословно — «Добавленное ранее оборудование недоступно в выбранное время», «Добавленный ранее промокод недоступен в выбранное время» и общий «Добавленное ранее оборудование и промокод недоступны в выбранное время»; диалог один, кнопки «Отменить» / «Перенести», приоритет «оба конфликта» проверяется первым \ lib/src/feature/widgets/time_choose_widgets/date_time_sections_manager.dart:453-506. Доступность оборудования и промокода на новое время проверяется реальными запросами \ lib/src/feature/orders_tab/change_time_screens/cubit/change_time_order_cubit.dart:48-139БизнесПодтверждено—
OQ4.1.2-21Подтверждение / FR4.1.2-22, FR4.1.2-23, FR4.1.2-24, FR4.1.2-27Что подтверждено: матрица из четырёх диалогов отмены построена именно по паре «бесплатная отмена доступна / истекла» × «заказ оплачен / не оплачен», причём частично оплаченный заказ (payedHalf) обрабатывается как оплаченный — ровно так, как зафиксировано в решении OQ4.1.2-3; кнопки во всех четырёх вариантах — «Не отменять» / «Да», «Не отменять» просто закрывает диалог \ lib/src/feature/orders_tab/order_room/widget/actullity/buttons_panel_widget.dart:41-61, 274-282, 350-352, тексты — cancel_dialog.dart:60-174, кнопки — cancel_dialog.dart:195-210БизнесПодтверждено—
OQ4.1.2-22Подтверждение / FR4.1.2-1, FR4.1.2-3, FR4.1.2-4, FR4.1.2-12, FR4.1.2-16Что подтверждено: вход в перенос закрыт для оплаченных заказов — кнопка «Перенести» показывается только при paymentStatus == notPayed и статусе заказа «Бронь» \ lib/src/feature/orders_tab/utils/conditions_btns_util.dart:91-101; заголовок диалога «Вы уверены, что хотите перенести заказ?» и подпись «Стоимость заказа может измениться» совпадают с BRD, «Не переносить» закрывает диалог без изменений, «Да» открывает экран выбора нового времени по текущей площадке и объекту \ lib/src/feature/orders_tab/order_room/order_room_screen.dart:379-445; при отсутствии конфликтов перенос идёт без дополнительного предупреждения \ date_time_sections_manager.dart:472-474; «Отменить» в диалоге конфликта не меняет заказ и оставляет выбранные таймслоты \ date_time_sections_manager.dart:497-511БизнесПодтверждено—

BRD 4.1.2 v0.1 · booking.mobile.flutter · commit 9db8346/dev · 17.08.26 · якоря lib/src/feature/orders_tab/order_room/ (order_room_screen.dart, widget/actullity/buttons_panel_widget.dart, widget/actullity/cancel_dialog.dart, widget/actullity/forfeit_block_widget.dart, data/order_room_repository.dart, model/order_screen_dto.dart), lib/src/feature/orders_tab/change_time_screens/, lib/src/feature/orders_tab/utils/conditions_btns_util.dart, lib/src/feature/widgets/time_choose_widgets/date_time_sections_manager.dart, lib/src/feature/time_widget/widget/time_widget_screen.dart, lib/src/core/components/repositories/order_service/orders_service_repository.dart Сверено 31 требование: Реализовано — 18, Частично — 11, Не реализовано — 2. Открытых вопросов добавлено 16 (OQ4.1.2-4…OQ4.1.2-19): бизнесу — 5, разработке — 11; подтверждений веса 1 — 3 (OQ4.1.2-20…OQ4.1.2-22). Два вопроса аналитика (OQ4.1.2-1, OQ4.1.2-3) оставлены без изменений. Скоуп сверки ограничен действиями переноса и отмены и связанными экранами/модалками; разделы 4.1 и 4.1.1 сверялись отдельно и здесь не дублируются. Бэкендовые правила (расчёт сбора, возврат, уведомление партнера) во фронт-коде не проверялись — они вне скоупа этого BRD. Маршрутизация без сверки с гайдбуком (гайдбук не передавался).

Повторная сверка по итогам дейликов (2026-09-09). Репозиторий booking.mobile.flutter (worktree booking.mobile.flutter-0908) · origin/main commit 1c4ad0e (08.09.2026, влит dev). Предыдущая сверка — 17.08.26, commit 9db8346. Между 9db8346 и 1c4ad0e якоря этого раздела (перечислены выше) тронули два коммита: 0d2c5cb "dart format" (31.08.26, форматирование без изменения логики — не задевает файлы с цитатами доказательств в OQ ниже, кроме time_widget_screen.dart, где изменилось только 6 строк форматирования) и 6f3e565 "fixes" (31.08.26) — единственная правка вне доказательств: order_room_screen.dart:741 убрала дублирующий текст errorText у общего ErrorScreen, к сценариям переноса/отмены (диалоги, таймслоты, результат) отношения не имеет. Задачи 09af204 "new filters + my orders rehaul" (10.08.26) и b44cfa2 "my orders tab reahaul" (27.07.26), упомянутые в задании как важные для 4.1.2, — оба предшествуют базовому коммиту 9db8346 и уже были учтены в сверке от 17.08.26. Содержательных изменений в домене переноса/отмены с прошлой сверки не найдено — все 31 требование и обе таблицы «Открытые вопросы» перепроверены точечно по актуальному коду (см. 4.1.2-mobile.changes.md) и оставлены без изменений; текст существующих строк OQ4.1.2-1…OQ4.1.2-22 не редактировался.

0 items under this folder.