Если касса создает два чека на один заказ, бизнес получает путаницу в документах, возвратах и отчетности. Обычно дубли появляются не в самой кассе, а в логике отправки фискализации.

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

Коротко: что сделать

  • Найти заказ и оба чека по времени создания
  • Проверить логи отправки в кассу
  • Проверить повторные webhook от платежной системы
  • Проверить очередь задач фискализации
  • Проверить наличие уникального ключа идемпотентности

Основные причины

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

  • Webhook оплаты пришел несколько раз и обработался повторно
  • Менеджер вручную нажал фискализацию после автоматической отправки
  • Сервис кассы вернул таймаут, а система отправила чек заново
  • Нет проверки существующего чека у заказа
  • Очередь задач запустила один job дважды

Пошаговая диагностика

Диагностику лучше проводить на одном воспроизводимом примере. Так проще увидеть не общий шум, а конкретное место, где интерфейс, сервер, интеграция или внешняя служба начинают вести себя неправильно.

  • Сопоставить payment_id, order_id и fiscal_receipt_id
  • Проверить таблицу чеков и статус заказа
  • Посмотреть ответы API кассы
  • Проверить retry-логи фоновых задач
  • Проверить, блокируется ли заказ на время фискализации

Как исправить проблему

Исправление должно закрывать первопричину, а не только маскировать симптом. Если затронуты доступы, платежи, данные клиентов или серверные настройки, сначала сделайте резервную копию и проверьте правку на тестовом сценарии.

  • Добавить идемпотентный ключ на чек
  • Проверять существующий чек перед отправкой нового
  • Разделить статусы: платеж получен, чек отправлен, чек подтвержден
  • Заблокировать повторную ручную фискализацию без подтверждения
  • Корректно обрабатывать таймауты кассы

Безопасный план решения

Сначала остановите создание новых дублей, затем разбирайте уже созданные чеки. Для бухгалтерии важно сохранить историю, а не просто удалить запись из базы.

Чего не стоит делать

  • Не удалять фискальные данные без согласования с бухгалтерией
  • Не отправлять чек повторно только потому, что нет мгновенного ответа
  • Не считать webhook уникальным по факту прихода
  • Не разрешать менеджерам повторять фискализацию без статуса

Что подготовить перед исправлением

  • Номер заказа
  • ID двух чеков
  • Логи webhook и API кассы
  • Название кассового сервиса

FAQ

Почему касса приняла два одинаковых чека?

Если система отправила два разных запроса без одного идемпотентного ключа, касса может считать их разными операциями.

Можно ли просто удалить лишний чек?

Фискальные данные нельзя просто удалить как обычную запись. Нужно смотреть правила возврата или коррекции.

Что делать с таймаутом кассы?

Нужно проверять статус операции по внешнему ID, а не сразу создавать новый чек.

Когда стоит обратиться за помощью

Помощь нужна, если дубли чеков уже пошли в рабочих заказах и затрагивают платежи, возвраты или отчетность.

Итог

Проверьте webhook, очередь, ручные действия и идемпотентность. Если нужно убрать дубли чеков и привести фискализацию в порядок, пишите в Telegram @rabotator_support.