Страница чека · a2.primpay.ru
«Мои чеки»: история чеков плательщика
Как плательщик находит свои чеки после оплаты, что он видит на экране и что это даёт людям и системе. Без регистрации, без телефона и email.
Исходная ситуация
Чек живёт ровно столько, сколько открыта вкладка
- Чек — это ссылка. Плательщик получает её по SMS, из QR на терминале или на экране кассы. Закрыл вкладку — чека больше нет.
- Старый чек не найти. Спустя неделю нужен чек для возврата или отчёта, а ссылки уже нет ни в SMS, ни в истории браузера.
- Несколько устройств. Один чек открыт с телефона, другой — с ноутбука. Ни в одном месте нет полного списка.
- Регистрации нет и не будет. Заставлять человека заводить аккаунт ради чека — терять его на первом же экране.
Так выглядел чек до изменений: один экран, одна ссылка, никакой истории.
Сценарий 1 · Открыл чек
Чек запоминается сам, в шапке появляется «Мои чеки»
- Ничего нажимать не надо. Открытый чек сразу попадает в историю: в браузере плательщика и в серверной копии.
- «Мои чеки» с первого чека. Кнопка в шапке ведёт на список, даже если в нём пока один чек.
- Подсказка про ярлык. Сразу под шапкой — предложение добавить «Мои чеки» на экран телефона. Одна кнопка на Android, короткая инструкция на iPhone. Можно скрыть на 30 дней.
- Чек ещё в очереди? Он тоже сохраняется с пометкой «ожидает фискализации» и обновится при следующем открытии.
Сценарий 2 · «Мои чеки»
Все чеки в одном списке, новые сверху
- Что видно. Продавец, дата и время оплаты, сумма. Нажатие открывает сам чек с QR и ссылкой на ОФД.
- Порядок по дате чека. Не по тому, когда чек открыли, а по тому, когда была оплата. Чек без даты (ещё не фискализирован) — по времени открытия.
- Статус фискализации. Чек в очереди помечен «ожидает фискализации» и сам обновится.
- Очистить историю. Одна кнопка с подтверждением. Удаляется и в браузере, и на сервере.
- Список принадлежит человеку. Он видит только то, что открывал сам. Ссылка на чек не даёт доступа к чужому списку.
История хранится в этом браузере и на сервере, привязанная к этому браузеру.
Сценарий 3 · Ярлык на экране
«Мои чеки» открываются как приложение, без ссылки
- Android, Chrome, десктоп. Кнопка «Добавить на экран» вызывает системный диалог установки. Иконка появляется рядом с другими приложениями.
- iPhone. Программной установки нет: на странице короткая инструкция «Поделиться → На экран „Домой“».
- Открывается сразу список. Ярлык ведёт на «Мои чеки», а не на последний чек. Без адресной строки, на весь экран.
- История та же, что в браузере. На iPhone у ярлыка отдельное хранилище, но ярлык получает личную ссылку плательщика и продолжает его список, а не начинает с нуля.
- Удалил ярлык — подсказка вернётся. Отказ действует 30 дней, а на странице «Мои чеки» всегда есть ссылка «Добавить на экран».
Сценарий 4 · Другое устройство
Один список на телефоне и ноутбуке — по коду за 10 минут
- Показать код. На устройстве, где есть история, в «Мои чеки» кнопка «Показать код для другого устройства»: шесть символов и QR.
- Ввести код. На втором устройстве — поле ввода на той же странице или сканирование QR. Списки объединяются, дальше оба устройства ведут один общий.
- Код одноразовый, живёт 10 минут. Перебор ограничен: не более 20 попыток с одного адреса.
- Подсказка на чеке. Если чек уже открывали с другого устройства, над ним появляется предложение перенести историю с полем для кода. Чужие чеки при этом не показываются.
- Только владелец обоих устройств. Объединить списки может лишь тот, кто держит в руках оба. Пересланная ссылка на чек этого не позволяет.
Покажите код или QR на этом устройстве и введите его на другом.
Код действует 10 минут.
Как это хранится
Две равноправные копии, объединение по номеру чека
- работает без сети и без сервера
- на iPhone стирается через 7 дней без визитов
- своё у каждого браузера и у ярлыка
- cookie ставит сервер: живёт 2 года, ITP её не трогает
- переживает смену браузера через код переноса
- допустимо потерять: браузер зальёт обратно
- что в записи
- номер сессии, продавец, сумма, дата, признак фискализации, время открытия. Ни телефона, ни имени, ни email.
- идентификатор
- случайный UUID в cookie. Он не связан ни с одним объектом основной базы и ничего не говорит о человеке.
- при расхождении
- фискализированная запись важнее нефискализированной, затем более свежая. Правило одно и то же в браузере и на сервере.
- при потере
- любая сторона восстанавливает другую при следующем открытии «Мои чеки». Чеки как таковые живут в основной базе и не затрагиваются.
Что получает плательщик
Чек больше не теряется
Ноль регистраций
Ни аккаунта, ни SMS-кода, ни email. Открыл чек — он уже в истории.
Иконка на экране
«Мои чеки» открываются как приложение. Не нужно искать ссылку в SMS или в истории браузера.
Старый чек за секунды
Список по дате оплаты, у каждого чека — QR для приложения ФНС и ссылка на ОФД.
Телефон и ноутбук вместе
Один код — и списки объединены. Дальше оба устройства ведут общую историю.
Понятно, что хранится
На странице написано, где лежит история. Одна кнопка удаляет её везде.
Чужие не увидят
Ссылка на чек открывает только этот чек. Чтобы объединить истории, нужны оба устройства.
Что получает система
Лояльность без новой сущности «пользователь»
Ни одной новой таблицы
Списки лежат в Redis с TTL два года. Схема PostgreSQL и миграции не затронуты.
Нечего защищать
Сервер хранит анонимный UUID и номера сессий, которые и так есть в базе. Ничего, что подпадает под 152-ФЗ, не появилось.
Работает при отказе Redis
Redis недоступен — страницы работают на копии браузера, ошибки уходят в лог. Redis потерян — браузеры зальют списки обратно.
Ссылка на чек не стала ключом
Объединение по общему чеку отвергнуто намеренно: пересланная ссылка открывала бы всю историю. Перенос только по одноразовому коду с лимитом попыток.
Плательщик приходит сам
Ярлык на экране и список чеков — повод возвращаться на сайт, а не в SMS. Точка контакта, которой раньше не было.
Меньше «пришлите чек ещё раз»
Человек находит чек сам. Номер сессии всегда на экране, если всё же понадобится обратиться.
Границы решения
Что стоит знать заранее
- История привязана к браузеру, пока её не перенесли кодом. Новый телефон или другой браузер начинают с пустого списка и подсказки о переносе. Это цена отсутствия регистрации.
- Очистка данных сайта в браузере удаляет локальную копию. Серверная копия и cookie остаются, список восстановится при следующем заходе. Если удалены и cookie — понадобится код с другого устройства.
- На iPhone ярлык ставится вручную. Safari не даёт вызвать установку кнопкой; на странице пошаговая инструкция.
- Redis должен сохранять данные между перезапусками. Иначе после рестарта серверная копия восстановится только с тех браузеров, которые снова зайдут в «Мои чеки».
- Пересланная ссылка показывает подсказку о переносе получателю. Данных она не раскрывает; получатель может скрыть её на 30 дней.
Итог
Четыре экрана, ноль регистраций, один список чеков на всех устройствах
- Открыл чек — он сохранён, в шапке «Мои чеки», рядом предложение поставить ярлык.
- «Мои чеки» — список по дате оплаты с суммами, статусом и переходом к чеку.
- Ярлык — «Мои чеки» как приложение, с той же историей.
- Код переноса — общий список на телефоне и ноутбуке за 10 минут.
- для плательщика
- чек всегда находится, ничего не надо заводить
- для системы
- без новых таблиц и персональных данных, устойчиво к отказу Redis
- где описано
- docs/fiscal: receipt-history, receipt-history-transfer, receipt-shortcut
- страницы
- /fiscal/receipt/<сессия> и /fiscal/receipts/
Для PDF: Ctrl+P (⌘+P), каждый слайд — отдельная страница. Все новости
Платёжный агрегатор