Вы находитесь на странице: 1из 41

Техническое задание на разработку

мобильных приложений для сети кафе


Батони
Задача 4
Общее описание 4
Дизайн 4
Требования к составу, структуре, цветовой гамме 4
Требования к стилистическому решению 5
Перечень и краткая характеристика мобильных приложений, стиль и
дизайн которых могут служить примерами 5
Список экранов 5
Экран “Загрузка” 6
Экран “Выбор бренда” 6
Экран “Выбор адреса” 7
Окно “Добавление, изменение и работа с сохраненными адресами” 9
Окно “Ввод адреса” 11
Экран “Мои адреса” 12
Экран “Истории” 12
Экран “Вход в профиль” 13
Экран “Ввод кода” 13
Экран “Профиль” 14
Экран “Мой кабинет” 15
Экран “Программа лояльности” 16
Экран “История заказов” 16
Экран “Мои карты” 17
Экран “Заведения” 18
Экран “Условия доставки” 19
Экран “О приложении” 19
Экран “Главная страница” 19
Логика экрана “Главная страница” 21
Экран “Акция” 21
Экран “Карточка блюда” 21
Экран “Корзина” 22
Логика экрана “Корзина” 24
Экран “Оформление заказа” 25
Логика экрана “Оформление заказа” 27
Экран “Способы оплаты” 28
Экран “Статус заказа” 29
Экран “Отзыв о заказе” 30
Push-уведомления 31
Панель администратора 31
Интеграции 40
Firebase 40
DaData 40
Сервис Яндекс.Карты 40
Приложение Яндекс.Карты 41
SMS.ru 41
Maxma 41
Материалы 41
Задача

1. Необходимо разработать front-end нативных мобильных приложений для OC


Android версии 7 и выше и IOS версии 13 и выше, и интегрировать
взаимодействие с ними через API с back-end и панелью администратора.
Ориентация приложения - книжная.

Общее описание

2. Основной функционал для пользователей (функциональные требования):


2.1. Совершение заказов на доставку;
2.2. Показ новостных историй;
2.3. Автоматическое определение локаций пользователя с возможностью их
сохранения, изменения и ручного ввода;
2.4. Хранение данных пользователя в личном кабинете пользователя;
2.5. Хранение истории заказов пользователя с функцией повтора заказа;
2.6. Отправка смс, e-mail сообщений, пуш уведомлений пользователю, в том
числе для подтверждения авторизации пользователя;
2.7. Расчет суммы заказа с применением акций, дисконтов, промокодов
действующих в доставке;
2.8. Отправка отзывов о заказе и о работе мобильного приложения;
2.9. Возможность выбора способа оплаты: картой онлайн, ApplePay,
GooglePay, наличными, картой курьеру;
2.10. Просмотр действующих акций в ленте акций;
2.11. Добавление блюд в корзину;
2.12. Добавление блюд в “Избранное”;
2.13. Просмотр информации о блюдах;
2.14. Просмотр информации о действующих ресторанах;
2.15. Просмотр модификаторов к блюду, в карточке блюда;
2.16. Просмотр рекомендаций блюд в корзине;
2.17. Выбор способа доставки;
2.18. Отображение времени доставки для выбранного адреса перед отправкой
заказа;
2.19. Отображение текущего статуса заказа после отправки заказа;
2.20. Возможность позвонить в call-центр из м.приложения;
2.21. Возможность создания чата с оператором в telegram через м.приложение.

Дизайн

3. Требования к составу, структуре, цветовой гамме


3.1. Цветовая гамма должна соответствовать цветовой гамме брендбука
(предоставляется Заказчиком). Стилистика дизайна приложения должна
быть гармонична с стилистикой сайта.

4. Требования к стилистическому решению

4.1. Стилистика дизайна приложения должна быть выполнена в соответствии


с брендбуком (предоставляет Заказчик).

5. Перечень и краткая характеристика мобильных приложений, стиль и


дизайн которых могут служить примерами

5.1. Примерами стиля и дизайна могут являться приложения "Яндекс.Еда" и


“Тануки” с применением фирменных цветов из брендбука.

Список экранов

6. Приложение содержит экраны:


6.1. Экран загрузки
6.2. Выбор бренда (опционально)
6.3. Выбора адреса
6.4. Добавление, изменение и работа с сохраненными адресами
6.5. Ввод адреса
6.6. Мои адреса
6.7. Экран истории
6.8. Вход в профиль
6.9. Ввод кода
6.10. Профиль
6.11. Мой кабинет
6.12. Программа лояльности (опционально)
6.13. История заказов
6.14. Мои карты
6.15. Заведения
6.16. Условия доставки
6.17. О приложении
6.18. Главная страница
6.19. Акция
6.20. Карточка блюда
6.21. Корзина
6.22. Оформление заказа
6.23. Способ оплаты
6.24. Статус заказа
6.25. Отзыв о заказе
7. Все экраны, кроме экрана загрузки и главной страницы, открываются с
анимаций всплывающих окон (референс - приложение TanukiFamily) с
возможностью скрыть экран свайпом.

8. Экран “Загрузка”
8.1. При активации иконки мобильного приложения на смартфоне
пользователя отображается загрузочное окно с логотипом бренда и
надписью. Логотип динамичный. Анимация - биение. Референс -
“Яндекс.Еда”.
8.2. Если есть активный заказ - осуществляется переход на экран “Статус
заказа”.
8.3. Если есть завершенный в течении последних суток заказ - открывается
окно “Отзыв о заказе”.
8.4. Если в приложении есть незавершенный в течении 1 суток заказ - у
авторизированных пользователей должны сохраняться данные о
выбранных блюдах, модификаторах, их количествах и количестве
приборов. По истечении суток корзина стирается.
8.5. Введённые единожды способ и адрес доставки, комментарий к заказу,
способ оплаты, состояние свитчера бесконтактной доставки сохраняются
в кэше приложения и загружаются при последующих входах в
приложение. Если пользователь разлогинился, то данные в кэше всё
равно сохраняются и применяются, если он залогинился снова по тому
же номеру телефона.
8.6. Если нет активного сеанса и на момент запуска приложения в кэше
сохранён адрес, то пользователю после загрузки приложения
открывается экран “Главный”, а выбранный адрес заполняется из кэша.
8.7. Если нет активного сеанса и на момент запуска приложения существуют
запланированные истории, то пользователю после загрузки приложения
открывается экран “Истории”.
8.8. В остальных случаях - открывается “Экран выбора адреса/бренда”, а
приложение запрашивает следующие разрешения:
8.8.1. Доставка push-уведомлений.
8.8.2. Определение геолокации.

9. Экран “Выбор бренда”


9.1. При попадании на экран открывается неактивная карта с эффектом
“затемнение”, поверх которой снизу открывается модальное окно с
выбором бренда (опция). До выбора бренда окно не закрывается.
9.2. Бренды представлены логотипами с названиями брендов, кликабельны.
По нажатию на бренд, совершается переход на экран “Выбор адреса”. В
случае, если бренд недоступен для выбора (в административной панели
внесли соответствующие изменения), иконка бренда становится
некликабельной. Необходимо также показать это визуально.
9.3. В случае, если бренд всего один, данный экран пропускается,
открывается сразу экран выбора адреса.

10. Экран “Выбор адреса”


10.1. Кнопки “Доставка” и “Самовывоз” (в виде свитча). По умолчанию
активна кнопка “Доставка”. При нажатии на способ доставки
(“Доставка”/”Самовывоз”) экран телефона коротко слабо вибрирует.
10.1.1. В случае активации кнопки “Доставка” на экране находятся:
10.1.1.1. Интегрированная карта (см. “Интеграции”).
10.1.1.2. Отметку геолокации - элемент “Иголка”. Всегда указывает
на центр карты. “Иголка” по умолчанию отображается в
соответствии с местоположением пользователя. Если
доступ к местоположению не предоставлен, то “Иголка”
устанавливается на центр Москвы. “Иголкой” можно
управлять при помощи прокрутки экрана, оставляя метку
на необходимом для заказа адресе. “Иголка” перемещается
на адрес, который выбран из списка сохраненных (“Мои
адреса”) или из поиска.
10.1.1.3. Кнопка “Моя локация”:
10.1.1.3.1. Если предоставлен доступ к геопозиции, то карта
перемещается, пока “Иголка” не станет указывать
на локацию пользователя.
10.1.1.3.2. Если доступ к геопозиции не предоставлен, то
запрашивается повторно.
10.1.1.4. Сохраненные адреса (“Мои адреса”) в формате
горизонтальной карусели (слайдер):
10.1.1.4.1. Сохраненные адреса могут быть только у
авторизированных пользователей. У
неавторизованных пользователей сохранённые
адреса не отображаются.
10.1.1.4.2. По нажатию на адрес из сохраненных, заполняется
поле с адресом, “Иголка” перемещается на
указанный адрес, а выбранный в слайдере адрес
обводится тонкой границей.
10.1.1.5. Поле “Адрес доставки”:
10.1.1.5.1. Отображается адрес, на который указывает
“Иголка”, если передвинуть карту. Если в строку
введен адрес вручную, “Иголка” передвигается к
нему.
10.1.1.5.2. По нажатию на строку открывается экран
“Добавление, изменение и работа с сохраненными
адресами”.
10.1.1.5.3. В открывшимся окне в поле поиска должен
отображаться адрес, который указан в поле. Поле
динамически расширяется, чтобы весь адрес
поместился на экране.
10.1.1.5.4. Указанный адрес отправляется на сервер для
проверки вхождения в зону доставки.
10.1.1.5.4.1. Если адрес не входит в зону доставки, то
кнопка “Я здесь” неактивна, а вместо неё
отображается сообщение о том, что адрес не
входит в зону доставки.
10.1.1.5.5. Кнопка “Я здесь”. Под картой отображается кнопка
подтверждения выбранного адреса. Кнопка
неактивна, если текущий адрес некорректный, а
вместо неё отображается сообщение о том, что
адрес не входит в зону доставки. Некорректным
адресом считается адрес, не содержащий номера
дома или находящийся в необслуживаемой зоне.
При выборе адреса и нажатии кнопки “Я здесь”
происходит переход на Главный экран.
10.1.2. В случае активации кнопки “Самовывоз” на экране находятся:
10.1.2.1. Интегрированная карта.
10.1.2.2. Список ресторанов в виде пинов с изображениями
логотипа бренда. По нажатию на отметку ресторана, его
адрес заполняется в нередактируемом поле адреса, а под
полем адреса добавляется разворачиваемое поле “О
ресторане” с информацией о ресторане. Номер телефона в
информации о ресторане кликабельный, нажатие создает
телефонный вызов на номер 8-499-653-653-0.
10.1.2.3. Кнопка “Выбрать ресторан”. По нажатию на неё всплывает
экран со списком адресов ресторанов. По нажатию на
адрес, он заполняется в поле. Поле динамически
расширяется, чтобы весь адрес поместился на экране.
10.1.2.4. Кнопка “Моя локация”:
10.1.2.4.1. Если предоставлен доступ к геопозиции, то карта
перемещается, пока центр карты с встроенной
меткой геопозиции не станет совпадать с локацией
пользователя.
10.1.2.4.2. Если доступ к геопозиции не предоставлен, то
запрашивается повторно.
10.1.2.5. Поле “Адрес ресторана”:
10.1.2.5.1. Отображается адрес ресторана, на который нажал
пользователь. Если адрес выбран из списка, карта
передвигается к нему и активируется пин
выбранного ресторана. Если адрес ещё не выбран,
поле скрыто. Если адрес выбран, справа от поля
должна быть кнопка крест, позволяющая сбросить
выбор адреса и вернуть кнопку “Список адресов”.
10.1.2.5.2. Кнопка “Заберу отсюда”. При выборе ресторана и
нажатии кнопки “Заберу здесь” происходит переход
на Главный экран.
10.2. Кнопка “Мой кабинет” в верхнем правом углу. По нажатию открывается
экран “Мой кабинет”.
10.3. Кнопка “Назад”. По нажатию возвращает на экран “Выбор бренда”.
Отсутствует, если в приложении один бренд.
10.4. Референсы:

Рис. 1 - Экран “Выбор адреса и бренда” Рис. 2 - Экран “Выбор адреса и бренда”

11. Окно “Добавление, изменение и работа с сохраненными


адресами”

11.1. Поле ввода адреса.


11.1.1. В процессе ввода адреса пользователю предлагается подобрать
адрес из предложенного списка (подсказка). Сохраненные адреса
в этот момент скрыты.
11.1.1.1. Предложенные адреса содержат название улицы и номер
дома.
11.1.1.2. Если поиск адреса был совершен из “Мои адреса” по
нажатию на адрес, пользователь переходит к окну ввода
информации об адресе.
11.1.1.3. Если поиск адреса был совершен с экрана поиска адреса,
то экран скрывается и выбранный адрес подставляется в
поле “Ваш адрес” на указанном экране или в поле адреса,
если переход был совершен с экрана “Главная страница”.
11.1.2. Если переход был совершен по нажатию на адрес с экрана
“Главная страница”, то до ввода пользователем, под полем ввода,
отображается список из сохраненных адресов. (рис. 4)
11.2. Референс:

Рис. 3 - Экран “Поиск адреса” Рис. 4 - Экран “Поиск адреса”

11.3. Если поиск адреса был совершен из “Мои адреса”, открывается экран с
подробной информацией об адресе. (Рис. 5) Также экран открывается по
нажатию на адрес на экране “Мои адреса”. (Рис. 6)
12. Окно “Ввод адреса”
12.1. Поле “Адрес”. Поле содержит название улицы и номер дома, который
был выбран на предыдущем шаге. Для ориентации о том, что на этом
шаге изменить улицу нельзя, нужно сделать его визуально
нередактируемым.
12.2. Поле “Кв./офис”. Обязательное для ввода поле.
12.3. Поле “Подъезд”. Не обязательное для ввода поле.
12.4. Поле “Этаж”. Не обязательное для ввода поле.
12.5. Поле “Домофон”. Не обязательное для ввода поле.
12.6. Если переход был совершен из экрана “Мои адреса”, в верхнем правом
углу отображается кнопка для удаления адреса с иконкой “корзины”.
12.7. Внизу экрана горизонтальная кнопка “Сохранить адрес”, по которой
совершается добавление адреса или сохранение изменений в адрес.
Возврат к экрану “Мои адреса”.
12.8. Референсы:

Рис. 5 - Экран “Заполнение и Рис. 6 “Заполнение и


изменение данных адреса” изменение данных адреса”

12.9. Авторизованный пользователь из экрана “Мой кабинет” может перейти


на экран “Мои адреса”. (Рис. 7)
13. Экран “Мои адреса”
13.1. Список из сохраненных адресов. Под адресом указана дополнительная
информация (кв./офис, подъезд и т.д.).
13.1.1. Рядом с адресом иконка “Иголки”.
13.1.2. По нажатию на адрес происходит переход к экрану изменения
данных об адресе. Известные поля автоматически заполняются.
13.2. Внизу экрана горизонтальная кнопка “Добавить адрес”. Кнопка
недоступна, если в списке 6 адресов. Переходит на экран аналогичный
экрану выбора адреса (Рис. 8) , со следующими отличиями:
13.2.1. Отсутствует функционал связанный с брендами.
13.2.2. Вместо кнопки “Мой кабинет” отображается кнопка “х”, которая
закрывает окно.
13.3. Референсы:

Рис. 7 - Экран “Мои адреса” Рис. 8 - Экран “Выбор адреса”

14. Экран “Истории”


14.1. Последовательность лоадеров. Механика перематывания повторяет
механику Instagram Stories:
14.1.1.При открытии истории карточка истории видна в течении 10
секунд, если пользователь не совершает действий. Далее
открывается следующая история, либо если история была
последняя, карточка закрывается и открывается основной экран.
14.1.2. Пользователь может остановить лоадер истории нажатием на
экран до тех пор, пока он не прервёт длительное нажатие.
14.1.3. Коротким нажатием на правую часть экрана либо свайпом влево
история пролистывается, и открывается следующая либо истории
закрываются, если история была последняя.
14.1.4. Коротким нажатием на левую часть экрана либо свайпом вправо
возвращается предыдущая история, либо лоадер истории
перематывается на начало, если история была первая.
14.2. Каждая история содержит:
14.2.1. Баннер на весь размер экрана смартфона.
14.2.2. Кнопку “Перейти к акции”. По нажатию открывает экран “Акция”
данной акции. У историй, не привязанных ни к какому баннеру
акции, данная кнопка отсутствует.
14.2.3. Элемент “х” в верхнем правом углу. Закрывает экран.

15. Экран “Вход в профиль”


15.1. Поле для ввода номера телефона с оглавлением. Поле должно содержать
маску “+7 ( ) - - ”. Ограничения:
15.1.1. Кол-во символов – 10.
15.1.2. Обязательное.
15.1.3. Для ввода доступны только цифры.
15.2. Кнопку “Отправить код”. Недоступна, пока номер введен некорректно.
По нажатию на “Отправить код”, если номер телефона введен корректно,
совершается переход на экран “Ввод кода”. На сервер отправляется API-
запрос для входа в профиль, в ответ должен прийти код для
подтверждения номера.

16. Экран “Ввод кода”


16.1. Экран в состоянии ввода кода подтверждения содержит:
16.1.1. Заголовок “Введите код”
16.1.2. Текст “Мы отправили вам код на номер [введенный номер].
16.1.3. 4 ячейки для ввода кода подтверждения. Ограничения:
16.1.3.1. Ячейки принимают на ввод только цифры.
16.1.4. Пункт “Отправить код повторно”, по нажатии на которую на
сервер повторно отправляется API-запрос для входа в профиль.
После каждой отправки кода, рядом отображается 5-и минутный
таймер с обратным отсчетом. Ограничения:
16.1.4.1. Недоступна для нажатия в течении 5 минут после каждого
нажатия.
16.1.4.2. Пропадает после третьего нажатия.
16.1.5. Кнопка “назад”, при нажатии осуществляется переход на экран
ввода номера с возможностью отредактировать введённый номер.
16.2. После ввода всех четырех цифр, автоматически проверяется
корректность введенного кода. На frontend-е происходит проверка на
совпадения пришедшего и введённого кодов. Если код введён корректно,
пользователь попадает на экран “Мой кабинет” авторизированного
пользователя.
16.3. Если введен некорректный код, под ячейками для ввода отображается
красная надпись “Введен неверный код. Повторите попытку.”.
Введенные цифры очищаются. В сутки пользователя должно быть не
более 20 попыток ввести код.
16.4. Если клиент новый, ему открывается экран “Профиль”.

17. Экран “Профиль”


17.1. Поле “Имя”. Обязательное для заполнения. Доступно для
редактирования без подтверждения.
17.2. Поле “Дата рождения”. При активации открывается редактируемое поле
с маской “**.**.****”. Обязательное для заполнения. Доступно для
редактирования без подтверждения.
17.3. Поле “Пол”, кнопки с выбором (мужской/женский). Не обязательно для
заполнения. По умолчанию ни одна из кнопок не активна, после нажатия
на какую-либо кнопку запоминается её состояние (выбранный пол).
Доступно для редактирования без подтверждения.
17.4. Поле “Эл.почта”, проверяется соответствие маске “__@_._”. Если введен
некорректный адрес, то рядом отображается красный текст “Введён
некорректный адрес”. Обязательное поле.
17.5. Поле “Телефон”. Поле должно содержать маску “+7 ( ) - - ”.
Ограничения:
17.5.1. Кол-во символов – 10.
17.5.2. Обязательное.
17.5.3. Для ввода доступны только цифры.
17.6. Свитчер “Отправлять письма об акциях и рекламе на эл. почту”. По
умолчанию включен.
17.7. В нижней части экрана кнопка “Сохранить изменения”. Если в
«Профиле» не введены данные в обязательные поля, то кнопка не
активна. Если какое-то поле введено с ошибкой, кнопка неактивна. По
нажатию сохраняется информация профиля. Если пользователем был
изменен номер телефона, открывается окно с подтверждением,
идентичное окну при авторизации.
18. Экран “Мой кабинет”

18.1. Меню кабинета:


18.1.1. Если пользователь не авторизирован, экран содержит:
18.1.1.1. Кнопка “Войти”. Нажатие совершает переход на экран
“Вход в профиль”.
18.1.1.2. Пункт “Заведения”. Нажатие совершает переход на экран
“Заведения”.
18.1.1.3. Пункт “Программа лояльности” (опционально). Нажатие
совершает переход на экран “Программа лояльности”.
18.1.1.4. Пункт “Условия доставки”. Нажатие совершает переход на
экран “Условия доставки”.
18.1.1.5. Пункт “О приложении”. Нажатие совершает переход на
экран “О приложении”.
18.1.1.6. В нижний части текст “Связаться с нами” и иконки:
18.1.1.6.1. Трубка телефона. Нажатие создает телефонный
вызов на номер 8-499-653-653-0.
18.1.1.6.2. Сообщение. Нажатие открывает штатное
приложение смартфона электронной почты и
создает новое сообщение на два e-mail адреса:
“Delivery@batoni-kafe.ru” и
“batonicollce@yandex.ru” с указанием темы
«Обратная связь».
18.1.1.6.3. Телеграм. Нажатие переводит пользователя в чат с
бизнес-аккаунтом оператора кафе “Батони”. Если у
пользователя нет установленного приложения
“Телеграм”, перевести его в стор (Google Play или
Apple Store) на страницу Телеграма.
18.1.2. Если пользователь авторизован, экран содержит:
18.1.2.1. Кнопка “Выйти”. По нажатию пользователь остаётся на
экране “Мой кабинет”, но переходит в статус
неавторизованного.
18.1.2.2. Имя пользователя. Оглавление.
18.1.2.3. Пункт “Профиль”. Крупным шрифтом. Нажатие совершает
переход на экран “Профиль”.
18.1.2.4. Пункт “Мои заказы”. Крупным шрифтом. Нажатие
совершает переход на экран “Мои заказы”.
18.1.2.5. Пункт “Мои адреса”. Крупным шрифтом. Нажатие
совершает переход на экран “Мои адреса”.
18.1.2.6. Пункт “Мои карты”. Крупным шрифтом. Нажатие
совершает переход на экран “Мои карты”.
18.1.2.7. Пункт “Заведения”. Средним, серым шрифтом. Нажатие
совершает переход на экран “Заведения”.
18.1.2.8. Пункт “Программа лояльности” (опционально). Средним,
серым шрифтом. Нажатие совершает переход на экран
“Программа лояльности”.
18.1.2.9. Пункт “Условия доставки”. Средним, серым шрифтом.
Нажатие совершает переход на экран “Условия доставки”.
18.1.2.10. Пункт “О приложении”. Средним, серым шрифтом.
Нажатие совершает переход на экран “О приложении”.
18.1.2.11. В нижний части иконки:
18.1.2.11.1. Трубка телефона. Нажатие создает телефонный
вызов на номер 8-499-653-653-0.
18.1.2.11.2. Сообщение. Нажатие открывает штатное
приложение смартфона электронной почты и
создает новое сообщение на два e-mail адреса:
“Delivery@batoni-kafe.ru” и
“batonicollce@yandex.ru” с указанием темы
«Обратная связь».
18.1.2.11.3. Телеграм. Нажатие переводит пользователя в чат с
бизнес-аккаунтом оператора кафе “Батони”. Если у
пользователя нет установленного приложения
“Телеграм”, перевести его в стор (Google Play или
Apple Store) на страницу Телеграма.

19. Экран “Программа лояльности”


19.1. Все пункты, относящиеся к программе лояльности (помеченные
“опционально”), в мобильном приложении должны быть реализованы, но
скрыты. При этом данные пункты не будут интегрированы с backend-ом.
19.2. Экран должен содержать:
19.2.1. Количество уже доступных к списанию бонусов.
19.2.2. Количество бонусов, находящихся в ожидании статуса оплаты.
19.2.3. Текстовое описание принципов работы программы лояльности.

20. Экран “История заказов”


20.1. Список свернутых заказов пользователя. Каждый свернутый заказ
содержит:
20.1.1. Номер заказа (получается по API с бэкэнда, бэкэнд получает из
FastOperator).
20.1.2. Дату и время заказа.
20.1.3. Статус заказа (см. экран “Статус заказа”).
20.1.4. Стоимость заказа.
20.2. Каждый заказ разворачивается по нажатию. В развернутом виде заказ
содержит:
20.2.1. Номер заказа.
20.2.2. Дату и время доставки.
20.2.3. Статус заказа (для активных заказов смотреть “Статус заказа”).
20.2.4. Стоимость заказа.
20.2.5. Количество бонусов, которые будут/были начислены за данный
заказ в рамках программы лояльности (опционально). Кроме
отменённых заказов.
20.2.6. Количество списанных бонусов для оплаты данного заказа в
рамках программы лояльности (опционально). Кроме отменённых
заказов.
20.2.7. Список позиций в заказе. Позиция содержит информацию:
20.2.7.1. Название позиции.
20.2.7.2. Модификаторы (см. экран “Карточка блюда”).
20.2.7.3. Количество заказанных позиций.
20.2.7.4. Цену позиции.
20.2.8. Кнопка “Повторить заказ”, по нажатию на которую открывается
идентичная корзина со всеми позициями (недоступные для заказа
позиции становятся неактивными, как описано в экране
“Корзина”), адресом из прошлого заказа, повторённым
количеством приборов, модификаторами и состоянием свитчера
“Бесконтактная доставка”. Если часть позиций недоступна для
заказа, об этом сообщается информационным сообщением во
всплывающем модальном окне в корзине.
20.2.9. Кнопка “Оставить отзыв” по нажатию на которую, открывается
экран “Отзыв о заказе”. Если заказ не был завершён (отменён),
кнопка неактивна.

21. Экран “Мои карты”

21.1. На данном экране пользователь имеет возможность выбрать основную


карту для оплаты заказа нажатием на неё. Рядом с выбранной картой
отображается соответствующая метка. Если добавлена только одна
карта, она автоматически становится картой по умолчанию. Если
добавляется вторая и далее карты, можно сменить карту по умолчанию
нажатием.
21.2. Экран содержит список добавленных карт. Каждая карта может быть
удалена свайпом влево. Каждая карта содержит:
21.2.1. Название платёжной системы.
21.2.2. Картинка платёжной системы.
21.2.3. “**” и последние 4 цифры номера карты.
21.3. Кнопка “Добавить новую карту”. По нажатию открывается окно с
добавлением карты. Возможно хранение не более пяти карт, после чего
данная кнопка становится некликабельной. Экран добавления карты
содержит:
21.3.1. Поле ввода “номера карты”. Если заполнен не полностью, должна
быть индикация. Ограничения:
21.3.1.1. Только цифры
21.3.1.2. Обязательно 16 или 18 символов
21.3.2. Поле ввода “имени и фамилии” с карты. Буквы автоматически
вводятся капсом. Если пустое, после начала ввода, должна быть
индикация. Ограничения:
21.3.2.1. Только буквы
21.3.3. Срок действия “__/__”. Выбрать более раннюю дату невозможно,
иначе должна быть индикация. Если заполнен не полностью,
должна быть индикация. Ограничения:
21.3.3.1. Только цифры
21.3.3.2. Обязательно 4 символа
21.3.4. Поле ввода CVV/CVC. Если заполнен не полностью, должна быть
индикация. Ограничения:
21.3.4.1. Только цифры
21.3.4.2. Обязательно 3 символа
21.3.5. Кнопка “Сохранить карту”. Неактивна пока остальные поля не
заполнены. По нажатию, пользователь возвращается на экран
“Способы оплаты”.

22. Экран “Заведения”


22.1. Окно содержит список карточек заведений. Каждая карточка содержит:
22.1.1. Заголовок заведения (название кафе, станция метро).
22.1.2. Фотография заведения (предоставляет Заказчик). Фото
расположены в виде слайдера. Фотографии кликабельны, при
нажатии открываются на весь экран.
22.1.3. Адрес заведения.
22.1.4. Номер телефона заведения.
22.1.5. Режим работы.
22.1.6. Кнопка “Построить маршрут”. По нажатию открывается
модальное окно с выбором приложения с картами (для выбора
доступно приложение Яндекс.Карты). По нажатию
осуществляется вызов приложения Яндекс.Карты с передачей
информации о местоположении ресторана и построением
маршрута до него.
23. Экран “Условия доставки”
23.1. Текст с условиями доставки (текст предоставляет Заказчик).
23.2. Цветовые обозначения зон доставки (информацию о зонах предоставляет
Заказчик).
23.3. Карта зон доставки (ссылку на размеченную карту предоставляет
Заказчик). При нажатии на область на карте всплывает привязанная к
данной области заметка (тексты заметок предоставляет Заказчик).

24. Экран “О приложении”


24.1. Текст лицензионного соглашения (текст предоставляет Заказчик).
24.2. Текст политики конфиденциальности (текст предоставляет Заказчик).
24.3. Текст реквизитов юридического лица (текст предоставляет Заказчик).

25. Экран “Главная страница”


25.1. При скроле экрана вниз вылезает лоадер и обновляется информация о
доступных для заказа блюдах и акциях. При скроле экран телефона
коротко слабо вибрирует.
25.2. В верхней части экрана логотип бренда с названием.
25.3. Слева от логотипа, когда в системе только один бренд - иконка
информации, по нажатию на которую всплывает окно на высоту 8/10 от
высоты экрана с описанием бренда. Если в системе больше одного
бренда - автоматически заменить кнопку информации кнопкой смены
бренда. По нажатию всплывает окно с подтверждением смены бренда.
Если пользователь согласился, его возвращает на экран “Выбор бренда”.
В случае изменения бренда корзина сбрасывается.
25.4. Под брендом, адрес, выбранный пользователем. По нажатию,
открывается экран “Добавление, изменение и работа с сохраненными
адресами”, если выбрана доставка, и адрес ресторана, если выбран
самовывоз.
25.5. Справа в верхней части экрана, иконка “моего кабинета”. По нажатию
осуществляется переход на экран “Мой кабинет”. У неавторизованного
пользователя открывается экран “Вход в профиль”, после
входа/регистрации осуществляется переход на экран “Мой кабинет”.
25.6. Поле “Поиск”. Текстовое редактируемое поле. Осуществляется поиск по
наименованиям блюд. Триггером является введение каждого символа.
25.7. Карусель карточек акций. При листании карточек экран телефона
коротко слабо вибрирует. Карточка акция представляет из себя баннер.
По нажатию открывается экран “Акция”.
25.8. Под акциями - карусель разделов меню. Выбранный раздел меню
пролистывает экран до галереи карточек позиций из данной категории, и
карусель прокручивается, чтобы выбранная категория стала первой в
ряду слева. Если пользователь листает горизонтальные галереи
категорий блюд вручную по вертикали, то карусель сдвигается влево, и
на карусели выделяется просматриваемая категория. При ручном
нажатии на категорию экран телефона коротко слабо вибрирует. Перед
каждой горизонтальной галереи категорий есть кнопка “все N” (где N -
динамически подсчитанное количество блюд в данной категории), по
нажатию открывающая всплывающее окно, содержащее:
25.8.1. Карусель разделов меню. Механика аналогична карусели на
“Главной странице”. При ручном выборе категории из данной
карусели карточки блюд меняются на блюда выбранной
категории.
25.8.2. Заголовок с названием категории.
25.8.3. Вертикальную галерею блюд данной категории.
25.9. Название выбранной категории. По умолчанию, первая категория меню.
Первая категория - “Избранное” для авторизированных пользователей, у
которых добавлена в “Избранное” хотя бы одна позиция.
25.10. Карточки позиций. По нажатию всплывает экран с подробной
информацией о позиции. Карточка содержит:
25.10.1. В верхнем левом углу могут располагаться иконки “New” и
“Перец” свидетельствующие о новизне и остроте блюда
соответственно (при наличии у данного блюда).
25.10.2. Фото позиции.
25.10.3. Название.
25.10.4. Грамовка позиции.
25.10.5. Цена. Является кнопкой, по нажатию на которую, блюдо
добавляется в корзину, а кнопка становится счётчиком с числом
позиций данного блюда в корзине и кнопками “+” и “-” для
увеличения/уменьшения данного количества. При нажатии на
сервер отправляется API-запрос на проверку, нет ли данного
блюда в стоп-листе ресторана. Если блюдо в стоп-листе, то
выплывает модальное окно с уведомлением, и блюдо становится
недоступным для заказа. У недоступных для заказа блюд данная
кнопка неактивна. При нажатии на активную кнопку экран
телефона коротко слабо вибрирует.
25.10.6. Если данная позиция находится в стоп-листе у ресторана,
выбранного на первом экране либо к которому относится
выбранный адрес доставки, карточка убирается вниз категории, а
кнопка “Цена” меняется на “Будет позже” и становится
некликабельной.
25.11. После добавления хотя бы одного блюда, внизу экрана появляется
кнопка корзины. Кнопка содержит информацию о сумме заказа,
количестве добавленных позиций. По нажатию у авторизованного
пользователя осуществляется переход на экран “Корзина”.
Неавторизованный пользователь попадает на экран “Вход в профиль”,
после входа/регистрации осуществляется переход на экран “Корзина”.
26. Логика экрана “Главная страница”
26.1. Логика расчёта количества товаров на значке “корзина”:
26.1.1. При отображении значка “корзина” на главном экране на ней
пишется количество товаров.
26.1.2. Если в корзине лежит несколько позиций одного и того же блюда,
на значке корзины они считаются как “1 товар”.
26.1.3. Если в корзине лежит несколько разных блюд, на значке корзины
количество товаров считается как количество разных блюд, вне
зависимости от того, сколько позиций каждого блюда выбрано.

27. Экран “Акция”


27.1. Баннер акции (картинка).
27.2. Заголовок акции.
27.3. Текст акции.
27.4. Кнопка “Хорошо”, по нажатию экран акции закрывается, и пользователь
возвращается на главный экран.

28. Экран “Карточка блюда”


28.1. Карточка всплывает на 8/10 от высоты экрана.
28.2. В верхнем правом углу элемент сердечка. По нажатию блюдо
добавляется в “Избранное”. При повторном нажатии блюдо удаляется из
“Избранного”.
28.3. Фото позиции.
28.4. Название позиции.
28.5. Описание позиции.
28.6. Количество бонусов, которые будут начислены за данное блюдо в
рамках программы лояльности (опционально).
28.7. Информационная кнопка (тултип), по нажатию на которую открывается
всплывающее окно с количеством калорий, белков, жиров и углеводов в
блюде.
28.8. В нижней части открытой карточки количество блюд, «+» и «-» для
возможности изменять количество, а также кнопка «Добавить», которая
содержит также цену с учётом цен выбранных модификаторов и
добавляет выбранное кол-во данного блюда в корзину. При нажатии на
кнопку “Добавить” на сервер отправляется API-запрос на проверку, нет
ли данного блюда в стоп-листе ресторана. Если блюдо в стоп-листе, то
выплывает модальное окно с уведомлением, и блюдо становится
недоступным для заказа. При нажатии на данные кнопки экран телефона
коротко слабо вибрирует.
28.9. Модификаторы. Модификаторы сгруппированы по категориям. К
каждой позиции может быть не более двух модификаторов. Каждый
модификатор содержит:
28.9.1. Название модификатора.
28.9.2. Кнопка “выбрать”. По нажатию модификатор добавляется в
корзину к данному блюду.
28.10. Если данная позиция находится в стоп-листе у ресторана, выбранного на
первом экране либо к которому относится выбранный адрес доставки,
кнопки “+”, “-”, “Добавить” и “Выбрать” у модификаторов становятся
неактивными, а кнопка “Добавить” меняется на “Будет позже”.

29. Экран “Корзина”


29.1. Оглавление “Корзина”.
29.2. Элемент “корзина”, по нажатию на который открывается всплывающие
окно с необходимостью подвердить или отменить отчистку. “Вы
действительно хотите очистить корзину?”, кнопка “Да”, элемент
“крестик”.
29.3. Кнопку “Назад”, по нажатию закрыть всплывающее окно, перейти на
экран “Главная страница”.
29.4. Перечень позиций. Каждую позицию можно удалить свайпом влево, в
таком случае счётчик данного блюда в корзине обнуляется, а строка
позиции пропадает из корзины. Каждая позиция содержит:
29.4.1. Фото позиции.
29.4.2. Название.
29.4.3. Количество блюд, «+» и «-» для возможности изменять его. При
нажатии экран телефона коротко слабо вибрирует.
29.4.4. Стоимость позиции. В зависимости от добавленного количества.
29.4.5. Количество бонусов, которые будут начислены за данное блюдо в
рамках программы лояльности (опционально).
29.4.6. По нажатию на позицию, открывается её карточка (вместо кнопки
“добавить”, “сохранить”).
29.4.7. Добавленные модификаторы (соусы/добавки, список
предоставляет Заказчик).
29.4.8. Если позиция стала недоступна для заказа, карточка блюда
становится визуально недоступной, количество позиций блюда в
корзине сбрасывается до нуля, а в описании блюда в экране
корзины добавляется соответствующая надпись. Кнопки “+” и “-”
также становятся неактивными, и добавляется кнопка “крестик”
для быстрого удаления блюда.
29.5. Количество необходимых приборов - свитчер. При активации
открывается счётчик с кнопками “+” и “-”, которые меняют цифру -
необходимое количество одноразовых приборов.
29.6. Кнопка промокоды. По нажатию переход на редактируемое поле для
введения промокода. Если промокод введён корректно, рядом с
промокодом появляется соответствующая метка, и происходит рассчёт
скидки. Если промокод введён некорректно, поле подчёркивается
красным и появляется сообщение об ошибке “Такого промокода не
существует”. Если данный промокод существует, но недоступен для
данного пользователя, поле подчёркивается красным и появляется
сообщение об ошибке “Данный промокод недоступен”.
29.7. Свитчер “У меня день рождения” с информационным сообщением “В
случае активации доступна оплата только наличными”. По умолчанию не
активен, при активации в “ Выборе способа оплаты” (экран “Оформление
заказа”) остаётся только вариант “Оплата наличными курьеру”. При
применении данной опции на фронте сразу пересчитывается цена с
учётом фиксированной скидки, а информация о данном пересчёте
отправляется на сервер вместе с остальным заказом.
29.8. Количество доступных бонусов в рамках программы лояльности
(опционально). Данное поле является кнопкой, по нажатию на которую
открывается модальное окно, содержащее:
29.8.1. Заголовок с динамически отображающимся количеством
доступных пользователю бонусов (количество бонусов берётся с
бэкэнда).
29.8.2. Крестик, позволяющий закрыть окно.
29.8.3. Поле для ввода количества бонусов для списания в данном заказе.
Принимает на вход только цифры. Введённое количество бонусов
для списания проверяется динамически сразу после введения
числа, до нажатия на кнопку “Списать бонусы” (см. “Логику
экрана “Корзина”).
29.8.4. Текстовое поле с предупреждением о максимально доступном
проценте от суммы заказа, которое можно оплатить бонусами
(количество процентов подтягивается динамически).
29.8.5. Кнопка “Списать N бонусов”, где N - динамически
отображающееся количество бонусов, введённое пользователем в
поле выше. По умолчанию не активна, N = 0. Становится
активной и с актуальным количеством бонусов N, когда
введённое количество бонусов удовлетворяет условиям (см.
“Логику экрана “Корзина”).
29.9. Количество бонусов, которые будут начислены за весь заказ в рамках
программы лояльности (опционально).
29.10. Расчет стоимости заказа:
29.10.1. Размер общей скидки. По умолчанию “0 р”.
29.10.2. Сумма к оплате (если были применены скидки, рядом находится
перечёркнутая цена до их применения).
29.11. “С этим заказывают”. Представляет собой слайдер с рекомендуемыми
блюдами и напитками. Рекомендованные блюда/напитки получаются по
API. Каждая карточка в слайдере содержит:
29.11.1. Картинку блюда/напитка.
29.11.2. Название.
29.11.3. Граммовку/литраж.
29.11.4. Кнопка, на которой указана цена. При нажатии на кнопку
блюдо/напиток добавляются в корзину, а данная карточка
убирается из слайдера, последующие за ней карточки сдвигаются
влево. При нажатии на активную кнопку экран телефона коротко
слабо вибрирует, а экран “Корзина” пролистывается выше так,
чтобы на экране была видна последняя из добавленных в корзину
позиций, а через 1,5 секунды экран пролистывается обратно до
слайдера с рекомендованными блюдами. При нажатии на сервер
отправляется API-запрос на проверку, нет ли данного блюда в
стоп-листе ресторана. Если блюдо в стоп-листе, то выплывает
модальное окно с уведомлением, и блюдо в корзине становится
недоступным для заказа, как описано в позиции блюда в корзине.
29.12. Кнопки выбора типа заказа: “Доставка” или “С собой”.
29.13. Кнопка “Продолжить”, по нажатию происходит проверка итоговой
суммы заказа. Если сумма заказа после применения всех скидок от 1000
рублей и более, то осуществляется переход на экран “Оформление
заказа”. Если сумма заказа менее 1000 рублей, открывается модальное
окно:
29.13.1. Сообщение о минимальной сумме заказа.
29.13.2. Кнопка “Понятно”, оставляющая пользователя на экране корзины.

30. Логика экрана “Корзина”


30.1. Корзина пользователя должна сохраняться после каждого внесённого
изменения. Сохраняются данные о выбранных блюдах, модификаторах,
их количествах, количестве приборов, способ и адрес
доставки/самовывоза, комментарий к заказу, бесконтактная доставка,
выбранный способ оплаты.
30.2. Если в процессе оформления заказа какое-то блюдо из корзины
оказалось в стоп-листе, то карточка блюда в корзине становится
визуально недоступной, а на экране “Корзины” всплывает модальное
окно с текстом о том, что некоторые позиции блюд сейчас недоступны
для заказа. При этом можно совершить заказ, не удаляя данные блюда из
корзины, но в заказ они не попадут, и стоимость заказа пересчитается с
учётом удаления данных блюд.
30.3. Промокоды должны распознаваться как системные, заданные в панели
администрирования, так и интегрированные из программы лояльности.
30.4. Логика рекомендованных блюд/напитков:
30.4.1. В каждой категории блюд есть одно рекомендуемое блюдо. API-
запрос получает список рекомендаций по категориям в
зависимости от добавленных в корзину блюд.
30.4.2. В слайдер с рекомендациями добавляются блюда из каждой из
предложенных категорий (предложенные категории - блюд из
которых нет в составе корзины пользователя).
30.4.3. Если пользователь добавил какое-то из рекомендуемых блюд в
корзину, то его карточка убирается из слайдера, а следующие за
ней карточки сдвигаются влево.
30.4.4. В случае, если все карточки с рекомендуемыми блюдами скрыты
(пользователь добавил в корзину каждое из них), слайдер остаётся
пустым.
30.5. Логика проверки введённого пользователями количества бонусов для
списания:
30.5.1. Введённое в текстовое редактируемое поле количество бонусов N
проверяется на удовлетворение условиям:
30.5.1.1. N <= количеству имеющихся у пользователя бонусов.
30.5.1.2. N <= количеству бонусов, доступных для списания в этом
заказе (в зависимости от разрешённого процента оплаты
заказа бонусами).
30.5.1.3. Для сравнения количества N берётся наименьшее из двух
вышеописанных чисел, назовём его M.
30.5.2. Если M < N (проверяется на frontend-е), отображаются ошибки:
30.5.2.1. Редактируемое поле с введённым количеством бонусов для
списания подчёркивается красным и появляется сообщение
об ошибке “Списать более M бонусов невозможно”.
30.5.2.2. Кнопка “Списать N бонусов”. Становится активной и с
актуальным количеством бонусов N, когда введённое
количество бонусов удовлетворяет всем условиям.

31. Экран “Оформление заказа”


31.1. Если выбран вариант “Доставка” (в зависимости от выбора доставки на
экране “Экран выбора адреса”) экран содержит:
31.1.1. Заголовок “Доставка”.
31.1.2. Предупреждение об использовании VPN.
31.1.3. Выбор времени доставки. Под датой свитчер «Как можно скорее»
добавляет к заказу примерное плановое время доставки.
Обязательно поле. По умолчанию время “как можно скорее”. Если
свитчер “Как можно скорее” не активен, по нажатию на поле
всплывает модальное окно для выбора даты/времени. При
перелистывании барабана в датой/временем экран телефона
коротко слабо вибрирует. Если свитчер “как можно скорее” не
активен, а время не выбрано, кнопка “Оформить заказ” не
активна. Доступное для выбора время - не ранее чем рассчётное
время в “как можно скорее”.
31.1.4. Адрес доставки. По умолчанию содержит заполненные
введённым в начале адресом полями. Содержит:
31.1.4.1. Поле “Адрес доставки”. Обязательное для ввода поле. Если
данное поле не заполнено, кнопка “Оформить заказ” не
активна, и под блоком ввода адреса должно отображаться
информационное сообщение об обязательных для
заполнения полях. По нажатию открывается экран “Выбор
адреса” в состоянии выбора адреса доставки. В случае,
если на карте пользователь меняет состояние “Доставка”
на “Самовывоз”, то по возвращении на экран оформления
заказа экран также переходит в состоянии самовывоза,
поле адреса доставки меняется на “Ресторан”, заголовок
меняется на “Самовывоз”, и экран телефона коротко слабо
вибрирует. На экране “Корзина” данная кнопка также
переключается на “Самовывоз”.
31.1.4.2. Поле “Кв./офис”. Обязательное для ввода поле. Если
данное поле не заполнено, кнопка “Оформить заказ” не
активна, и под блоком ввода адреса должно отображаться
информационное сообщение об обязательных для
заполнения полях.
31.1.4.3. Поле “Подъезд”. Необязательное для ввода поле.
31.1.4.4. Поле “Этаж”. Необязательное для ввода поле.
31.1.4.5. Поле “Домофон”. Необязательное для ввода поле.
31.1.5. Свитчер бесконтактной доставки. По умолчанию в неактивном
состоянии.
31.1.6. Текстовое редактируемое поле “Комментарий к заказу”. По
нажатию активируется поле для ввода комментария и выплывает
свитчер “Сохранять комментарий для следующих заказов”. По
умолчанию в неактивном состоянии.
31.1.7. Выбор способа оплаты. По нажатию на данный пункт
открывается экран “Способы оплаты”.
31.1.8. Стоимость доставки.
31.1.9. Расчет стоимости заказа. Суммирует итоговую стоимость за
блюда (с учётом всех скидок; если были применены скидки, то
цена до учёта скидок перечёркнута, а рядом написана новая цена)
и за доставку.
31.1.10. Кнопка “Оформить заказ” (работу кнопки см. в пункте “Логика
работы экрана “Оформление заказа”).
31.2. Если выбран вариант “Самовывоз”, экран содержит:
31.2.1. Заголовок “Самовывоз”.
31.2.2. Предупреждение об использовании VPN.
31.2.3. Выбор времени доставки. Под датой свитчер «Как можно скорее»
добавляет к заказу примерное плановое время доставки.
Обязательно поле. По умолчанию время “как можно скорее”. Если
свитчер “Как можно скорее” не активен, по нажатию на поле
всплывает модальное окно для выбора даты/времени. При
перелистывании барабана в датой/временем экран телефона
коротко слабо вибрирует. Если свитчер “как можно скорее” не
активен, а время не выбрано, кнопка “Оформить заказ” не
активна. Доступное для выбора время - не ранее чем рассчётное
время в “как можно скорее”.
31.2.4. Поле “Ресторан”. Обязательное поле. Если данное поле не
заполнено, кнопка “Оформить заказ” не активна, и под блоком
ввода адреса должно отображаться информационное сообщение
об обязательных для заполнения полях. По нажатию открывается
экран “Выбор адреса” в состоянии выбора ресторана для
самовывоза. В случае, если на карте пользователь меняет
состояние “Самовывоз” на “Доставка”, то по возвращении на
экран оформления заказа экран также переходит в состоянии
доставки, поле “Ресторан” меняется на адрес доставки, заголовок
меняется на “Самовывоз”, и экран телефона коротко слабо
вибрирует. На экране “Корзина” данная кнопка также
переключается на “Доставка”.
31.2.5. Текстовое редактируемое поле “Комментарий к заказу”. По
нажатию активируется поле для ввода комментария и свитчер
“Сохранять комментарий для следующих заказов”. По умолчанию
в неактивном состоянии.
31.2.6. Выбор способа оплаты. Аналогичен выбору способа оплаты в
“Доставке”.
31.2.7. Расчет стоимости заказа. Суммирует итоговую стоимость за
блюда (с учётом всех скидок; если были применены скидки, то
цена до учёта скидок перечёркнута, а рядом написана новая цена).
31.2.8. Кнопка “Оформить заказ” (работу кнопки см. в пункте “Логика
работы экрана “Оформление заказа”).

32. Логика экрана “Оформление заказа”


32.1. При нажатии на кнопку “Оформить заказ” на сервер отправляется API-
запрос с новым заказом, и происходит проверка блюд на наличие в стоп-
листе.
32.1.1. Если все блюда доступны, производится оплата.
32.1.2. Если какие-то блюда из заказа оказались в стоп-листе, то оплата
не производится, а пользователю на экране “Оформление заказа”
открывается модальное окно с соответствующим текстом и
кнопкой “Перейти в корзину”.
32.1.2.1. Если пользователь выбирает вернуться в корзину,
открывается экран “Корина”. В корзине недоступные для
заказа блюда показываются визуально недоступными (см.
описание в экране “Корзина”), и цена за заказ
пересчитывается за вычетом данных позиций. На бэкэнде
данные блюда также автоматически убираются из заказа.
Все данные, введённые на экране “Оформление заказа”,
при этом сохраняются.
32.1.2.2. Если пользователь скрывает окно, то остаётся на экране
“Оформление заказа”. При повторном нажатии на кнопку
“Оформить заказ” снова открывается модальное окно.
32.2. Если выбран вариант оплаты онлайн, оплата производится через бэкэнд.
Бэкэнд формирует ссылку на оплату в эквайринге и передаёт ссылку на
фронт. На фронте открывается webview эквайринга. После успешной
оплаты, открывается экран “Статус заказа”, и на сервер отправляется
уведомление о новом заказе. Иначе, под кнопкой отображается красная
надпись “Оплата не была совершена”.
32.3. Совершённый заказ добавляется в “Историю заказов”.

33. Экран “Способы оплаты”


33.1. На данном экране пользователь имеет возможность выбрать способ
оплаты заказа нажатием на него.
33.2. Экран содержит 4 способа:
33.2.1. Apple Pay для iOS, Google Pay для Android (данные способы
оплаты подключить независимо от возможности тестировать.
Если протестировать невозможно в связи с геополитической
ситуацией, то не тестировать, а кнопки сделать визуально
неактивными).
33.2.2. Картой онлайн. Является способом по умолчанию. На экране с
выбором карты должна быть кнопка “Добавить карту”, за
исключением случаев, когда сохранено 5 карт. По умолчанию в
активном состоянии. По нажатию на данный способ, открывается
модальное окно с сохранёнными картами с возможностью
изменить карту для оплаты (из сохранённых или добавить новую.
При добавлении новой карты она автоматически сохраняется в
“Мои карты”. По умолчанию выбрана карта “по умолчанию”, если
хотя бы одна карта сохранена). После нажатия на карту
выбранная карта помечается соответствующим символом, и
пользователь может закрыть окно кнопкой “Назад” или свайпом
вниз. После этого модальное окно закрывается, и выбранная карта
отображается как выбранный способ оплаты.
33.2.3. Картой курьеру/кассиру (в зависимости от типа доставки).
33.2.4. Наличными курьеру/кассиру (в зависимости от типа доставки).
При выборе данного способа должны выплывать дополнительные
поля:
33.2.4.1. “Общая сумма заказа” с общей суммой заказа (с учётом
доставки).
33.2.4.2. “Укажите, с какой суммы необходима сдача” с
редактируемым текстовым полем, принимает на вход
только числа.
33.3. Кнопка “Сохранить”. По нажатию способ применяется, и происходит
переход обратно на экран “Оформление заказа”.

34. Экран “Статус заказа”

34.1. Открывается как модальное окно на 8/10 от высоты экрана. При


закрытии окна остаёмся на главном экране.
34.2. Если заказ с доставкой, экран содержит:
34.2.1. Заголовок “Статус заказа”.
34.2.2. Номер заказа (получается по API).
34.2.3. Ориентировочное время до доставки. По API получаем время в
минутах до доставки заказа, преобразовывает его на странице в
счётчик, на котором время динамически обновляется каждую
минуту. В случае, если таймер закончился, а заказ всё ещё не
доставлен, время останавливается на значении “0 минут”, а под
ним появляется сообщение с извинениями.
34.2.4. Время совершения заказа.
34.2.5. Сумма заказа.
34.2.6. Количество бонусов, которые будут начислены за данный заказ в
рамках программы лояльности (опционально).
34.2.7. Количество списанных бонусов для оплаты данного заказа в
рамках программы лояльности (опционально).
34.2.8. Статус заказа с анимированной иллюстрацией (Ждёт
подтверждения / Подтверждён / Готовится / В пути / Доставлен /
Отменён). Обновляется динамически из FastOperator.
34.2.9. Адрес доставки.
34.2.10. Кнопка “Позвонить в ресторан”. Нажатие создает телефонный
вызов на номер 8-499-653-653-0.
34.2.11. Список позиций в заказе. Позиция содержит информацию:
34.2.11.1. Название позиции.
34.2.11.2. Модификаторы.
34.2.11.3. Количество заказанных позиций.
34.2.11.4. Цену позиции.
34.3. Если заказ с самовывозом, экран содержит:
34.3.1. Заголовок “Статус заказа”.
34.3.2. Номер заказа (получается по API).
34.3.3. Ориентировочное время до готовности (получается по API).
34.3.4. Время совершения заказа.
34.3.5. Сумма заказа.
34.3.6. Количество бонусов, которые будут начислены за данный заказ в
рамках программы лояльности (опционально).
34.3.7. Количество списанных бонусов для оплаты данного заказа в
рамках программы лояльности (опционально).
34.3.8. Статус заказа с анимированной иллюстрацией (Ждёт
подтверждения / Подтверждён / Готовится / Ожидает / Отменён).
Обновляется динамически из FastOperator.
34.3.9. Адрес самовывоза.
34.3.10. Кнопка “Позвонить в ресторан” - нажатие создает телефонный
вызов на номер данного ресторана из “Контактов”.
34.3.11. Список позиций в заказе. Позиция содержит информацию:
34.3.11.1. Название позиции.
34.3.11.2. Модификаторы.
34.3.11.3. Количество заказанных позиций.
34.3.11.4. Цену позиции.
34.4. Статусы заказа делают активными соответствующие иконки, у каждого
статуса своя иконка (за исключением статусов “Ждёт подтверждения” и
“Подтверждён” - у них общая иконка).
34.5. В случае, если администратор по телефону согласовал с пользователем
изменение состава заказа уже после его оформления в приложении, он
вносит изменения в заказ в панели администратора, и сервер присылает
запрос об изменении состава и стоимости заказа. Новые данные
приложение принимает и вносит соответствующие изменения в состав и
стоимость заказа на вкладки “Статус заказа” (статус остаётся
“Подтверждён”, если заказ не отменён, либо “Отменён” в случае отмены)
и “История заказов”.
34.6. Если заказ отменён, то счётчик обратного отсчёта до
готовности/доставки заказа, время заказа и начисленные и списанные
бонусы скрываются с экрана.

35. Экран “Отзыв о заказе”

35.1. Заголовок “Отзыв о заказе”.


35.2. Оценка еды (обязательное поле):
35.2.1. Содержит сообщение “Оцените еду”
35.2.2. Пять серых звезд для оценки качества, по нажатию звезда и
звезды левее окрашивается в золотой/жёлтый цвета. Для выбора
доступны только целые значения звёзд.
35.3. Оценка обслуживания (обязательное поле):
35.3.1. Содержить сообщение “Оцените обслуживание”
35.3.2. Пять серых звезд для оценки качества, по нажатию звезда и
звезды левее окрашивается в золотой/жёлтый цвета. Для выбора
доступны только целые значения звёзд.
35.4. Текстовое поле “Отзыв” (необязательное поле).
35.5. Кнопка “Отправить отзыв”. Если какое-либо из обязательных полей не
заполнено, кнопка неактивна. По нажатию отзыв отправляется на сервер.
На сервере номер заказа должен браться из FastOperator.

36. Push-уведомления
36.1. Приложение должно иметь возможность отправлять push-уведомления.
Уведомления могут быть:
36.1.1. Автоматическими, сформированными на бэкэнде и
отправленными по прописанным на бэкэнде триггерам.
36.1.1.1. Приложение должно автоматически отправлять push-
уведомление, если пользователь положил какие-либо
блюда в корзину и вышел из приложения, не сделав заказ.
Через 10 минут после выхода из приложения ему должно
прийти push-уведомление с напоминанием о завершении
заказа.
36.1.2. Отправленные в ручном режиме с панели администратора.
Триггером служит кнопка “Отправить push-уведомление”.
36.1.3. Отправленными программой лояльности по триггерам, заданными
внутри программы лояльности.

Панель администратора
37. Панель администратора должна включать в себя возможности:
37.1. Возможность вручную изменять рекомендованные блюда для каждой
категории для слайдера с рекомендациями в корзине.
37.2. Возможность вручную редактировать текст с описанием программы
лояльности (на экране “Программа лояльности”).
37.3. Возможность просмотра в реальном времени пользователей
веб-сайта/приложения, которые зашли на платформу, авторизовались,
добавили какие-либо блюда в корзину и вышли, не сделав заказ. По
прошествии 10 минут их данные попадают в отчёт. Данный отчёт
представляет собой журнал, в который пользователи добавляются
сверху, а нижние строки хранятся в качестве истории. Под просмотром
пользователей подразумевается просмотр следующей информации:
37.3.1. Имя.
37.3.2. Дата рождения.
37.3.3. Пол (если пользователь заполнил данный пункт; если поле не
заполнено, выводить “неизвестно”).
37.3.4. Номер телефона.
37.3.5. Электронная почта.
37.3.6. Адрес доставки/ресторана, которые он выбрал.
37.3.7. Какие блюда он добавил в корзину.
37.3.8. Время добавления пользователя в данный отчёт.
37.4. Возможность моментального обновления информации. По нажатию на
кнопку “Обновить информацию” информация из редактируемых полей
административной панели (FastOperator), которые были изменены,
обновляется в базе данных бэкэнда.
37.5. Возможность закрыть доставку из конкретного ресторана по нажатию на
чекбокс (приведение в положение “выключено”) напротив этого
ресторана.
37.6. Возможность добавлять, редактировать, удалять истории в мобильном
приложении:
37.6.1. Через кнопку “Добавление истории” загружать новые истории
(медиа-файлы из памяти устройства). Ограничение для видео:
длительность не более 10 секунд.
37.6.2. Через кнопку “Удаление истории” удалять текущую историю.
37.6.3. Через кнопку “Редактирование истории” удалять медиа-файл
текущей истории и загружать на его место новый медиа-файл из
памяти устройства. Ограничения такие же, как на добавление
историй.
37.6.4. Возможность создавать как истории, привязанные к какому-либо
баннеру акции, на которых будет присутствовать кнопка перехода
к информации об акции, так и историй, не привязанных ни к
какой акции, на которых данная кнопка будет отсутствовать.
37.7. Возможность включать и выключать доступные для заказа бренды
ресторанов, переведя чекбокс бренда в режимы “включен” и “выключен”
соответственно.
37.8. Возможность менять режим работы ресторанов. Время указывается в
стандартном формате (день недели, часы, минуты).
37.9. Возможность добавлять скидки конкретным блюдам. При этом новая
цена работает для всех пользователей без использования промокодов, а
старая (обычная) цена на блюде остаётся перечёркнутой. Рядом
помещается новая цена по скидке.
37.10. Возможность ручной отправки push-уведомлений. При этом с
возможностью отправить уведомления только пользователям,
совершившим когда-либо заказ в конкретном филиале ресторана.
Добавить текстовое редактируемое поле, в которое будет вводиться
сообщение для отправки в push-уведомление, и кнопку “отправить”.
37.11. Отправка push-уведомлений в автоматическом режиме в случаях:
37.11.1. Если пользователь зашёл в приложение, добавил какие-либо
блюда в корзину и вышел, не оформив заказ. Через 15 минут
после выхода из приложения должно прийти push-уведомление с
напоминанием о заказе.
37.11.2. Если у пользователя активна акция “скидка в течение 21 дня” - за
Х дней отправлять ему push-уведомление с напоминанием о
скором окончании данной акции. При этом в панели
администратора должна быть возможность менять количество
дней Х.
37.12. Формирование и просмотр отчётности, основанной на данных заказов с
веб-сайта и мобильного приложения:
37.12.1. Когортный анализ:
37.12.1.1. Представляет из себя таблицу по месяцам. По умолчанию
выводятся 3 строки по 3 последним месяцам, включая
текущий. Возможно загрузить в виде таблицы на странице
браузера и скачать файлом XLS.
37.12.1.2. Доступные для вывода в таблицу опции:
37.12.1.2.1. Отображать:
37.12.1.2.1.1. Месяц в целом (рис. 9):
37.12.1.2.1.1.1. Всего клиентов за месяц.
37.12.1.2.1.1.2. Всего заказов за месяц.
37.12.1.2.1.1.3. Среднее количество заказов на одного
клиента.
37.12.1.2.1.1.4. Общая сумма выручки за месяц.

Рис. 9 - Месяц в целом

37.12.1.2.1.2. LTV пришедших клиентов (Этот раздел


позволяет проанализировать не весь месяц в
целом, а только новых покупателей, чей
первый заказ был произведён в этом месяце)
(рис. 10):
37.12.1.2.1.2.1. Количество новых клиентов за месяц.
37.12.1.2.1.2.2. Средний чек новых клиентов.
37.12.1.2.1.2.3. Среднее количество заказов на одного
нового клиента.
37.12.1.2.1.2.4. Цена клиента - сумма заказов новых
клиентов в искомом месяце
суммируется с суммой их же заказов в
последующих месяцах (суммы заказов
новых клиентов по месяцам
рассчитываются в “Когортах”), и
данная сумма делится на количество
новых клиентов в искомом месяце.

Рис. 10 - LTV пришедших клиентов

37.12.1.2.1.3. Когорты (рис. 11):


37.12.1.2.1.3.1. Столбец “Показатели”:
37.12.1.2.1.3.1.1. Новые клиенты, сделавшие
заказ в данном месяце
(числовое и процентное
количество).
37.12.1.2.1.3.1.2. Количество заказов в данном
месяце, сделанное новыми
клиентами.
37.12.1.2.1.3.1.3. Среднее количество заказов на
одного нового клиента.
37.12.1.2.1.3.1.4. Доход от новых клиентов за
месяц.
37.12.1.2.1.3.2. Столбцы 1…N:
37.12.1.2.1.3.2.1. Столбец 1 - новые клиенты,
пришедшие в рассматриваемом
месяце. Остальные столбцы до
столбца N - показатели по
клиентам, пришедшим в
рассматриваемый месяц, во все
остальные месяцы вплоть до
текущего. Например, если
сейчас апрель, а
рассматриваемый месяц -
февраль, то будут столбцы: 1 -
февраль, 2 - март, 3 - апрель.
37.12.1.2.1.3.2.2. В данных столбцах
заполняются перечисленные в
столбце “Показатели”
значения.

Рис. 11 - Когортный анализ

37.12.1.2.1.4. За всё время - отображает количество строк,


равное количеству месяцев, доступных для
анализа (рис. 12).
Рис. 12 - За всё время

37.12.1.2.2. Разделять таблицы по:


37.12.1.2.2.1. Филиалам. Загружается по таблице на
каждый филиал ресторана.
37.12.1.2.2.2. Устройствам (iOS/Android).
37.12.1.2.2.3. Типу доставки (С собой/Внутри/Доставка).
37.12.1.2.2.4. Типу оплаты (Наличные/Карта/Карта
курьеру/ApplePay/GooglePay).
37.12.1.3. Перед каждой таблицей отображается процент конверсии.
Конверсия – это показатель, который показывает, сколько
покупателей пришедших в один месяц перешли в другой.
Считается как средний процент возвратов клиентов во
втором месяце. Рассчитывается для каждой группы путём
деления суммы всех клиентов из столбика 2 на сумму всех
клиентов в столбике 1 (для когортного анализа).
37.12.2. Текущий график (рис. 13):
37.12.2.1. Здесь отображается число заказов за последние две недели,
а также прогноз на следующие 7 дней.
37.12.2.2. Представляет собой график, где каждый день отмечен
точкой на графике:
37.12.2.2.1. Ось X: дата по дням (начальная - день две недели
назад от текущего, конечная - день неделя вперёд от
текущего дня).
37.12.2.2.2. Ось Y: число заказов.
37.12.2.2.3. Точки на графике, соединённые линиями разных
цветов. Предсказания соединены пунктирной
линией.
37.12.2.3. Предсказания от текущего дня и на неделю вперёд
строятся на основании данных за предыдущие 4 недели.
Рассчитывается как среднее значение по данному дню
недели за последние 4 недели.
37.12.2.4. При наведении курсора на точку любого дня на графике
подсвечивает данные по ней:
37.12.2.4.1. Дата.
37.12.2.4.2. День недели.
37.12.2.4.3. Количество заказов.
Рис. 13 - Текущий график

37.12.3. Сравнение периодов (рис. 14):


37.12.3.1. Представляет собой график сравнения двух временных
промежутков. График состоит из:
37.12.3.1.1. Ось X: даты (день/промежуток дней).
37.12.3.1.2. Ось Y: число заказов.
37.12.3.1.3. Точки на графике, соединённые линиями.
37.12.3.2. В графике можно настраивать следующие параметры:
37.12.3.2.1. Начало периодов (даты на двух календарях).
37.12.3.2.2. Длительность промежутков (сколько дней будет
суммироваться в одно деление на оси X).
37.12.3.2.3. Количество промежутков (количество делений на
оси X).
37.12.3.3. Количественные показатели отчёта (сравнение суммарных
значений по двум заданным периодам):
37.12.3.3.1. Количество заказов в сумме.
37.12.3.3.2. Количество заказов в среднем (количество заказов в
промежуток времени, делённый на количество
промежутков).
37.12.3.3.3. Денег в сумме.
37.12.3.4. Кнопки быстрой настройки:
37.12.3.4.1. Последние 2 недели (7 промежутков по 1 дню,
последняя неделя заканчивается на дне накануне
текущего, предпоследняя - ровно на неделю
раньше).
37.12.3.4.2. Последние 2 месяца (28 промежутков по 1 дню,
последний месяц заканчивается на дне накануне
текущего, предпоследний - ровно на 4 недели
раньше).
Рис. 14 - Сравнение периодов

37.12.4. Отменённые заказы (рис. 15):


37.12.4.1. Выбор даты начала и конца анализируемого промежутка.
37.12.4.2. Кнопка “Загрузить”.
37.12.4.3. По выбранным параметрам строится график:
37.12.4.3.1. Ось X: даты выбранного периода (каждый день
отдельно).
37.12.4.3.2. Ось Y: число заказов.
37.12.4.3.3. Графики:
37.12.4.3.3.1. Выполненные заказы.
37.12.4.3.3.2. Отменённые клиентами заказы.
37.12.4.3.3.3. Отменённые кассиром/баристой заказы.
37.12.4.3.4. Общие числовые значения данного отрезка
времени:
37.12.4.3.4.1. Общее количество выполненных заказов.
37.12.4.3.4.2. Общее количество заказов, отменённых
клиентами.
37.12.4.3.4.3. Общее количество заказов, отменённых
кассиром/баристой.
Рис. 15 - Отменённые заказы

37.12.5. RFM анализ (рис. 16):


37.12.5.1. Представляет собой матрицу частот по выбранным
характеристикам (осям). Чем больше количество клиентов,
находящихся в ячейке на пересечении двух диапазонов,
тем в более тёмный цвет красится ячейка (для визуального
анализа температур).
37.12.5.2. Каждый промежуток значений представлен промежутком
на оси, который задаёт границы ячейки. Данных
промежутков на каждой оси 10 шт. Значения делятся
между ними поровну (разница максимального и
минимального значения, делённая на 10).
37.12.5.3. Настраиваемые параметры:
37.12.5.3.1. Оси:
37.12.5.3.1.1. Первый заказ (сколько дней назад был
совершён).
37.12.5.3.1.2. Последний заказ (сколько дней назад был
совершён).
37.12.5.3.1.3. Частота заказов (средняя частота заказов
каждого клиента, количество дней с момента
регистрации пользователя к количеству его
заказов).
37.12.5.3.1.4. Количество заказов (общее количество
заказов каждого клиента).
37.12.5.3.1.5. Средний чек (средний чек из всех заказов
каждого клиента).
37.12.5.3.1.6. Выручка с клиента (общее количество денег
с каждого клиента).
37.12.5.3.2. Временной период:
37.12.5.3.2.1. За всё время.
37.12.5.3.2.2. За последний год.
37.12.5.3.3. Фильтровать по числу заказов (сколько заказов
сделал клиент):
37.12.5.3.3.1. Любое количество.
37.12.5.3.3.2. 2 и больше.
37.12.5.3.3.3. Ровно 1.

Рис. 16 - RFM анализ

Интеграции

38. Firebase
38.1. Интеграция с Firebase для реализации аутентификации пользователей.
38.2. Аккаунт предоставляет заказчик.

39. DaData
39.1. Для работы подсказок адреса подключается DaData.
39.2. Аккаунт для подключения предоставляет Заказчик.

40. Сервис Яндекс.Карты


40.1. В качестве интерактивных карт используются Яндекс.Карты.
40.2. Аккаунт для подключения предоставляет Заказчик.
41. Приложение Яндекс.Карты
41.1. В качестве приложения для построения маршрутов до ресторанов
используются Яндекс.Карты.
41.2. Материалы:
https://yandex.ru/dev/yandex-apps-launch/maps/doc/concepts/yandexmaps-
ios-app.html

42. SMS.ru
42.1. Для работы авторизации подключается сервис sms.ru.
42.2. Материалы https://sms.ru/api
42.3. Аккаунт для подключения предоставляет Заказчик.

43. Maxma
43.1. Для подключения программы лояльности подключается сервис Maxma.
43.2. Программа лояльности должна иметь возможность отправлять push-
уведомления в мобильное приложение.
43.3. Материалы
https://docs.google.com/document/d/1_rYaXF36yyECZPr7zird0s2PzdKP2aV
uKqmgDw85-pE/edit ; https://docs.maxma.com/api/
43.4. Аккаунт для подключения предоставляет Заказчик.

Материалы

44. Проект API с рекомендациями по взаимодействию с мобильным приложением


доступен по ссылке:
https://docs.google.com/spreadsheets/d/1Xx_1dS4GCq7jSnYX3RBnrybS3TA0sIWvh
C09dzrzq-s/edit#gid=0
45. Дизайн-макеты мобильноо приложения доступны по ссылке:
https://www.figma.com/file/LnNEvvXXzPsOpvnhwXgebh/Batoni_App?node-
id=0%3A1

Вам также может понравиться