Мы давно сопровождаем сайт одного из наших клиентов в сфере туризма — разработали его ещё несколько лет назад, и с тех пор он находится на нашей технической поддержке. За это время проект вырос: появились новые направления, усложнилась структура цен, возникли требования по работе с поставщиками и, конечно, — по соблюдению законодательства.
Недавно клиент обратились с запросом, задача звучала ёмко:
«Нужно, чтобы при оплате в ЮКассу передавалась почта клиента для чека».
На первый взгляд — пустяк. Одно поле в форме.
Но за этой «мелочью» скрывалась целая цепочка требований 54-ФЗ, особенности работы агентской схемы и необходимость полного пересмотра интеграции с ЮKassa.
Почему «просто отправить email» — это не просто
Многие думают, что онлайн-оплата — это «кнопка + платёжка». Но когда речь заходит о фискализации, всё становится серьёзнее. Особенно в туризме, где вы — агент, а не поставщик услуг.
Закон требует:
- Указывать в чеке настоящего поставщика (туроператора)
- Корректно отражать признак агента
- Передавать email или телефон покупателя — иначе чек не считается выданным.
На деле было иначе:
- Оплата шла через модуль оплаты + ЮKassa,
- Чеки формировались без email,
- Поставщики не указывались.
Чеки не соответствовали 54-ФЗ.
Этап 1. Интеграция с ЮKassa
Первым делом мы перевели сайт на сценарий «Сначала платёж, потом чек» — именно он позволяет гибко управлять данными чека.
Это означало:
- Создание отдельного запроса к API ЮKassa после успешного платежа,
- Передача всех необходимых данных: email клиента, состав услуг, реквизиты поставщика, признак агента.
Да, это потребовало переписать часть модуля оплаты.
Но теперь клиент полностью контролирует, что попадает в чек — и соответствует закону.
Этап 2. Скидки
Почему скидка — не просто «минус 1000 руб.»?
Когда клиент получает скидку на тур (например, «раннее бронирование» или «групповая скидка»), эта скидка применяется ко всей корзине. Но по требованиям 54-ФЗ каждая позиция в чеке должна быть корректно отражена:
- цена за единицу,
- количество,
- итоговая сумма по строке.
Просто указать «скидка –5000 ₽» отдельной строкой — нельзя.
ФНС требует, чтобы скидка была распределена пропорционально по каждой позиции, особенно если эти позиции относятся к разным поставщикам (а у них — разные ИНН, НДС, признаки агента).
Если этого не сделать:
- чек не пройдёт валидацию в онлайн-кассе,
- или, что хуже, если бы прошел, то был бы некорректным — и при проверке налоговая увидит расхождение между реальной стоимостью услуг и суммой в чеке.
Как мы решили задачу
- Определили базовую стоимость каждой услуги (до скидки).
- Рассчитали общий объём скидки и пропорционально распределили её между всеми позициями в корзине.
- Убедились, что итоговая сумма чека = сумме платежа, иначе ЮKassa вернёт ошибку.
Это потребовало:
- точной арифметики с округлением до копеек (чтобы не было «потери» 1–2 рублей),
- гибкой логики в сниппете формирования чека,
- и тщательного тестирования на разных сценариях.
Этап 3. Агентская схема
В туризме если вы продаёте «не свой» товар. Вы — посредник. И чек должен это отражать.
Мы реализовали три ключевых улучшения:
1. Справочник поставщиков
Вместо того чтобы вручную вводить ИНН и телефон в каждом туре, администратор может выбирать поставщика из списка. Все данные хранятся централизованно — меньше ошибок, проще обновлять.
2. Автоматическое определение НДС и реквизитов
Если поставщик в Туре выбран — система сама подставляет его ИНН, ставку НДС и контакты.
Если нет — ставится «Без НДС».
3. Группировка услуг в чеке
Раньше, если в Туре было 3 услуги от одного поставщика, в чеке было 3 строки. Теперь — одна строка:
«Тур: ХХХХ — поставщик: ООО "УУУУ", ИНН 1234567890 ....»
Это не только соответствует закону — это удобнее для клиента и чище для бухгалтерии.
4. Скидка применяется только к наценке агента
Когда туристическая компания работает по агентской модели, она:
- Не продаёт тур напрямую,
- Выступает посредником между клиентом и туроператором (поставщиком),
- Зарабатывает на разнице между ценой поставщика и финальной ценой для клиента — это и есть наценка агента.
Соответственно:
- Цена поставщика — это фактическая стоимость услуги, которую агент обязан оплатить туроператору.
- Скидка — это маркетинговое решение самого агента (например, «раннее бронирование» или «спецпредложение»).
- Поэтому скидка должна уменьшать только наценку агента, а не стоимость самого тура у поставщика.
Как мы это реализовали технически:
- Разделили каждую позицию в чеке на две части:
— Услуги поставщика — по фактической цене (без скидки),
— Услуги агента — как разница между финальной ценой и ценой поставщика.
- Применили скидку только ко второй части — к «Услугам агента».
- При группировке всех услуг одного поставщика в одну строку:
— Сумма поставщика = сумма всех его услуг без изменений,
— Сумма агента = общая наценка минус пропорциональная часть скидки,
— Итоговая сумма чека = сумма платежа — всё сходится.