ТЗ. Запуск столовой с предзаказами блюд через WEB-приложение гостя
1. Суть задачи
Запустить для столовой предзаказ блюд через браузерный интерфейс JPOS.
Клиент должен:
- Открыть JPOS в браузере на телефоне.
- Выбрать блюда из меню.
- Добавить их в заказ с нужным количеством.
- Видеть итоговую цену корзины.
- Оплатить заказ через СБП.
- Получить экран с QR-кодом заказа.
- Показать QR-код на раздаче.
- Получить заказ и подтвердить получение.
Сотрудник столовой на раздаче должен:
- Отсканировать QR-код клиента.
- Увидеть заказ в Юпитере.
- Закрыть заказ одним кликом.
- Напечатать фискальный чек при закрытии заказа.
2. Общая архитектура
Используемая схема:
- Клиентская часть JPOS работает в браузере.
- Серверная часть JPOS размещается в облаке, на сервере CLOUD.
- Юпитер также размещается в облаке, рядом с JPOS, чтобы уменьшить задержки.
- На раздаче используется рабочее место с доступом к Юпитеру и локальной базой с обменом данными с облачным сервером.
- Для выдачи заказов используется существующее окно проверки заказов в Юпитере.
- Заказ передаётся в Юпитер только после подтверждения оплаты.
- Оплата выполняется через индивидуальную платёжную ссылку СБП.
3. Основной пользовательский сценарий
3.1. Открытие меню
Клиент открывает ссылку/страницу JPOS в браузере.
На экране отображается меню:
- 2 позиции блюд;
- фото блюда;
- описание блюда;
- цена;
- возможность выбрать количество;
- кнопка добавления в корзину/заказ.
Требование:
- Интерфейс должен быть адаптирован под мобильный браузер.
- Пользователь должен видеть состав заказа и итоговую сумму.
3.2. Формирование заказа
Клиент:
- Выбирает блюда.
- Указывает количество.
- Видит состав заказа.
- Видит итоговую цену корзины.
- Переходит к оплате.
Требования:
- Должна отображаться актуальная сумма заказа.
- Должна быть возможность изменить количество или убрать позицию до оплаты.
- До успешной оплаты заказ не должен передаваться в Юпитер как готовый заказ к выдаче.
4. Оплата через СБП
4.1. Формирование ссылки на оплату
После того как клиент подтвердил заказ:
- Клиентская часть JPOS отправляет запрос в backend JPOS.
- Backend JPOS формирует запрос к банку/платёжному сервису.
- Банк/платёжный сервис возвращает индивидуальную ссылку на оплату.
- Backend JPOS передаёт эту ссылку в браузер клиента.
- Клиент переходит к процедуре оплаты.
Требования:
- Для каждого заказа формируется отдельная платёжная ссылка.
- Фиксированный общий QR-код не используется, так как суммы и состав заказов отличаются.
- Оплата выполняется через СБП.
4.2. Контроль оплаты
За статусом оплаты следит backend JPOS.
Логика:
- Клиент уходит на оплату.
- Backend JPOS периодически проверяет статус платежа.
- Если оплата подтверждена — процесс идёт дальше.
- Если оплата не подтверждена — клиенту показывается экран с предложением оплатить заказ.
Требования:
- Нельзя передавать заказ в Юпитер до подтверждения оплаты.
- При ошибке оплаты клиент должен иметь возможность вернуться к заказу и повторить оплату.
- Статус оплаты должен определяться серверной частью, а не только фактом возврата пользователя на страницу.
5. Создание заказа в Юпитере
5.1. Передача заказа после оплаты
Когда оплата подтверждена:
- Backend JPOS передаёт информацию о заказе в Юпитер.
- Юпитер создаёт заказ у себя.
- Юпитер возвращает в JPOS номер созданного заказа.
- JPOS показывает клиенту экран с номером заказа и QR-кодом.
Требования:
- Заказ в Юпитере создаётся только после успешной оплаты.
- Клиент должен увидеть номер заказа.
- Клиент должен получить QR-код, содержащий номер заказа или иной идентификатор, по которому заказ можно найти в Юпитере.
5.2. Экран клиента после оплаты
После успешной оплаты клиент видит:
- номер заказа;
- QR-код заказа;
- кнопку «Заказ получен».
Дополнительно желательно:
- QR-код должен сохраняться при обновлении страницы.
- Можно предусмотреть кнопку сохранения изображения QR-кода, но это не является обязательным для первого этапа.
6. Поведение кнопки «Заказ получен»
На экране клиента есть кнопка:
«Заказ получен»
Логика работы:
6.1. Если клиент нажал кнопку до фактической выдачи
Если заказ ещё не закрыт в Юпитере:
- Клиенту показывается сообщение: нужно подойти на раздачу и получить заказ.
- Заказ не считается полученным.
- Меню заново не открывается.
6.2. Если клиент нажал кнопку после фактической выдачи
Если заказ уже закрыт или удалён в Юпитере:
- Клиенту снова отображается меню для выбора товаров.
- Это означает, что заказ успешно завершён.
Требование:
- Фактом получения заказа считается изменение статуса заказа в Юпитере на «Закрыт» или «Удаление заказа».
- Не нужно пока добавлять таймеры и автоматическое закрытие заказа.
- Не нужно автоматически считать заказ полученным по времени.
7. Выдача заказа на раздаче
7.1. Рабочее место выдачи
На раздаче используется компьютер/моноблок/устройство с доступом к Юпитеру.
Основной вариант:
- Используется Windows-устройство.
- Доступ к Юпитеру осуществляется через локальное оборудование в столовой.
- На экране открыто окно проверки заказов Юпитера.
Требования:
- Устройство должно быть удобно расположено для сотрудника выдачи.
- Должен быть подключён сканер QR-кодов.
- Сотрудник должен видеть состав заказа перед выдачей.
7.2. Процесс выдачи
Порядок действий:
- Клиент подходит на раздачу.
- Показывает экран телефона с QR-кодом.
- Сотрудник сканирует QR-код.
- Юпитер находит заказ.
- Сотрудник видит состав заказа.
- Сотрудник выдаёт заказ.
- Сотрудник закрывает заказ одним кликом.
- При закрытии заказа выполняется фискализация и печать чека.
Требования:
- Окно на раздаче должно находиться в режиме ожидания сканирования.
- После успешного закрытия заказа окно должно возвращаться к ожиданию следующего сканирования.
- Сотрудник должен видеть состав заказа, так как в заказе может быть несколько позиций.
8. Фискализация и чек
8.1. Базовый сценарий
Основной согласованный вариант:
- Чек печатается при закрытии заказа на раздаче.
- Фискальный регистратор находится на раздаче или подключён к рабочему месту выдачи.
- Фискализация происходит в момент закрытия заказа сотрудником.
Причина:
- Серверный Юпитер не знает, на какой клиентской машине находятся FR-сервер и фискальник.
- Фискализация должна выполняться там, где доступна клиентская машина с подключённым фискальником.
8.2. Если фискальник только на кассе
Если установить фискальник на раздаче невозможно, обсуждается альтернативный вариант:
- Фискальник остаётся на кассе.
- Рабочее место раздачи и кассовое рабочее место связываются через локальную сеть.
- Передача данных возможна через общую папку и/или отдельный обмен.
Но этот вариант является спорным и требует отдельного согласования.
8.3. Электронный чек
Отправку чека на e-mail пока не добавлять.
Причина:
- Зависит от возможностей фискальника.
- Зависит от подписки/возможностей ОФД.
- При неподдерживаемом режиме устройство может вместо электронного чека печатать бумажный.
9. Интеграции
9.1. JPOS → Банк/СБП
Backend JPOS должен:
- формировать платёжную ссылку для конкретного заказа;
- передавать ссылку клиенту;
- проверять статус платежа;
- получать подтверждение оплаты;
- корректно обрабатывать ошибки и таймауты.
Особенности:
- Для взаимодействия могут требоваться специальные сертификаты/ключи.
- Документация Сбербанка по созданию и проверке платежа должна быть доступна.
- Поведение платёжной ссылки и возврат клиента на страницу ещё нужно проверить.
9.2. JPOS → Юпитер
Backend JPOS должен:
- передавать заказ в Юпитер только после подтверждения оплаты;
- получать номер созданного заказа;
- возвращать номер заказа в клиентскую часть;
- при необходимости получать статус заказа для экрана клиента.
Требования:
- Нельзя создавать заказ в Юпитере до оплаты.
- Нужно обеспечить корректную связку заказа в JPOS и заказа в Юпитере.
9.3. Юпитер → рабочее место выдачи
Юпитер должен:
- передать заказ на точку/в кассовую зону;
- обеспечить отображение заказа в окне проверки;
- позволять найти заказ по отсканированному коду;
- показывать состав заказа;
- давать закрыть заказ одним действием;
- инициировать печать фискального чека при закрытии.
10. Требования к инфраструктуре
10.1. Серверная часть
Нужно предусмотреть:
- Размещение JPOS и базы Юпитера в облаке рядом друг с другом.
- Доступ сотрудников к Юпитеру через локальное оборудование в столовой.
- Внешний порт для работы серверной части JPOS.
10.2. Оборудование на раздаче
Нужно определить:
- Тип устройства: Windows-ПК, моноблок, планшет или другое.
- Способ подключения к Юпитеру.
- Возможность работы сканера штрих-кодов/QR-кодов.
- Способ крепления устройства на раздаче.
- Наличие интернета на точке.
- Наличие фискального регистратора.
- Схему подключения фискального регистратора.
11. Организационные вопросы
11.1 Инструкция Сбербанка
Есть инструкция от Сбербанка.
Порядок:
- Инструкцию передать Лене.
- Первые 9 пунктов инструкции выполняет клиент на своей стороне.
- Если Лена не справится, она должна обратиться в техподдержку.
- Техподдержка должна быть заранее в курсе задачи и быть готова помочь.
Дополнительно:
- Инструкция или ссылки в ней могут измениться, это нужно учитывать.
12. Спорные моменты и открытые вопросы
Ниже перечислены пункты, которые не имеют окончательного решения или требуют отдельного согласования.
Спорный момент 1. Место установки фискальника
Суть:
- Удобно, когда фискальник стоит на раздаче, и клиент получает чек сразу вместе с заказом.
- Если фискальник только на кассе, клиенту придётся идти к кассе с подносом, что неудобно.
Текущий рабочий вариант:
- Фискальник устанавливается на раздаче.
- Чек печатается при закрытии заказа.
Что нужно решить:
- Можно ли физически установить фискальник на раздаче.
- Согласна ли Лена на полноценное рабочее место с моноблоком и фискальником.
- Если фискальник на раздаче невозможен, как организовать печать чека на кассе.
Спорный момент 2. Момент фискализации
Суть:
- Обсуждался вариант фискализировать заказ сразу после онлайн-оплаты.
- Но серверный Юпитер не знает, на какой клиентской машине находятся FR-сервер и фискальник.
- Поэтому фискализация сразу после оплаты технически не обеспечена.
Текущий рабочий вариант:
- Фискализация происходит при обработке/закрытии заказа на раздаче.
Что нужно решить:
- Окончательно подтвердить, что фискализация выполняется при закрытии заказа на раздаче.
- Проверить, соответствует ли это требованиям закона для конкретной схемы общепита.
Спорный момент 3. Правовая схема чеков
Суть:
- Обсуждалось, что для общепита чек должен предшествовать приёму денег.
- Также звучало мнение, что нужны два чека: при оформлении заказа и после оплаты.
- Единая правовая схема не согласована.
Что нужно решить:
- Уточнить требования законодательства для выбранной схемы.
- Определить, сколько чеков нужно печатать и в какой момент.
- Зафиксировать это отдельно до запуска.
Спорный момент 5. Готовность клиентской части
Суть:
- Есть серверная часть JPOS, которая умеет работать с меню, корзиной, скидками и модификаторами.
- Но полноценный клиентский сайт/витрина может быть не готов как законченный продукт.
- Обсуждалось, что для клиента нужен удобный интерфейс с меню, фото, описанием и оплатой.
Текущий рабочий вариант:
- Для данной столовой сделать минимальный клиентский экран с двумя позициями.
Что нужно решить:
- Достаточно ли текущего интерфейса для запуска.
- Нужна ли отдельная полноценная витрина.
- Как будет публиковаться меню, описания, фото и цены.
Спорный момент 6. Возврат клиента на страницу после оплаты
Суть:
- После перехода в платёжную форму клиента нужно вернуть на правильную страницу JPOS.
- Поведение платёжной ссылки ещё нужно проверить.
Что нужно решить:
- Как клиент возвращается на страницу заказа после оплаты.
- Нужно ли передавать параметры заказа в ссылке.
- Как обрабатывать сценарий, если клиент закрыл браузер и вернулся позже.
Спорный момент 7. Домен и SSL
Суть:
- Для работы серверной части может требоваться внешний порт.
- Вопросы домена и SSL-запросов до конца не закрыты.
Что нужно решить:
- Используется ли домен.
- Нужен ли SSL-сертификат.
- Как организовать защищённое взаимодействие между JPOS, банком и клиентской частью.
Спорный момент 9. Производительность Юпитера при проверке оплаты
Суть:
- Проверка статуса платежа может идти через Юпитер.
- Если Юпитер однопоточный, возможны задержки при множественных одновременных запросах.
Что нужно решить:
- Проверить нагрузку.
- Оценить задержки.
- При необходимости использовать альтернативную схему оплаты через Юпитер или отдельный механизм проверки статуса.
Спорный момент 10. Количество позиций в меню
Суть:
- В текущей постановке указано меню из двух позиций.
- В обсуждениях также упоминался вариант меню с тремя кнопками.
Текущая фиксация для ТЗ:
- 2 позиции.
Что нужно подтвердить:
- Окончательное количество позиций.
- Нужны ли категории или отдельные кнопки.
- Как будет обновляться меню.
Спорный момент 11. Поведение при ошибке печати чека
Суть:
- Если при закрытии заказа фискальник не напечатал чек, это может остановить выдачу.
Что нужно решить:
- Что делает сотрудник при ошибке печати.
- Можно ли закрыть заказ без чека.
- Нужно ли повторять печать.
- Какие ошибки показывать сотруднику.
- Нужно ли логировать ошибки фискализации.
13. Итоговая целевая схема
Кратко процесс должен работать так:
- Клиент открывает JPOS в браузере.
- Видит меню из двух позиций.
- Добавляет блюда в заказ.
- Видит цену корзины.
- Нажимает оплату.
- Backend JPOS запрашивает платёжную ссылку СБП.
- Клиент получает ссылку и переходит к оплате.
- Backend JPOS следит за оплатой.
- Если оплата не подтверждена — клиенту предлагается оплатить заказ.
- Если оплата подтверждена — JPOS передаёт заказ в Юпитер.
- Юпитер создаёт заказ.
- Юпитер возвращает номер заказа в JPOS.
- JPOS показывает клиенту номер заказа и QR-код.
- Юпитер передаёт заказ на точку выдачи.
- Клиент показывает QR-код на раздаче.
- Сотрудник сканирует код.
- Юпитер находит заказ.
- Сотрудник видит заказ и закрывает его одним кликом.
- При закрытии печатается фискальный чек.
- Клиент нажимает «Заказ получен».
- Если заказ уже закрыт/удалён — клиент возвращается в меню.
- Если заказ ещё не закрыт — клиенту предлагается подойти на раздачу.
15. Критерии готовности к тестированию
Систему можно считать готовой к первичному тестированию, если:
- Клиент может открыть JPOS в браузере.
- Меню отображается с фото, описанием и ценой.
- Можно добавить блюда в заказ.
- Видна итоговая сумма.
- Можно сформировать платёжную ссылку СБП.
- Оплата проходит и подтверждается.
- Backend JPOS корректно определяет статус оплаты.
- Заказ передаётся в Юпитер только после оплаты.
- Юпитер создаёт заказ и возвращает номер.
- Клиент видит номер заказа и QR-код.
- На раздаче можно отсканировать QR-код.
- Юпитер находит заказ по коду.
- Сотрудник видит состав заказа.
- Заказ можно закрыть одним кликом.
- При закрытии заказа печатается фискальный чек.
- Кнопка «Заказ получен» корректно работает до и после закрытия заказа.
Система JUPITER www.jupiter.systems (с) 2024г.
Нет комментариев