Схемы Что нового

Фискализация (54-ФЗ)

Онлайн-касса и чеки по 54-ФЗ: подключение кассы, что попадает в чек, очередь чеков и боевой режим.

Содержание раздела

Фискализация (54-ФЗ)

Автоматическая отправка кассовых чеков в ОФД: модуль фискализации, состояние и боевой режим, какие платежи фискализируем, что попадает в чек, окно кассы и очередь чеков. Отдельно — пошаговое подключение кассы клиента.

Модуль фискализации 54-ФЗ

Модуль формирует кассовый чек и передаёт его в ОФД при приёме оплаты — согласно Федеральному закону № 54-ФЗ. Чек бьётся собственной кассой организации, реквизиты продавца (ИНН, СНО, ставка НДС) берутся из брендинга компании — единый источник, без дублирования в карточке кассы.

Обучающее видео 2:49

Зачем нужен модуль, какие платежи фискализируем и почему агрегаторы мимо, чек-лист готовности к боевому режиму, карточка кассы и очередь чеков. С озвучкой.

Чек бьём только по своему безналу

Платёжные агрегаторы — ЮKassa, Wallet One — фискализируют оплату своей кассой сами. Если пробить чек ещё и нашей, клиент получит два чека на один платёж, а в ФНС уйдёт двойная выручка; исправляется это только чеками коррекции через налоговую. Поэтому модуль фискализирует только безнал, который мы обрабатываем сами — через банковские выписки.

Состояние и боевой режим

Страница Настройки → Фискализация (/admin/settings/atol_config/) начинается с ответа на главный вопрос: пробиваются ли чеки прямо сейчас и что мешает. Под заголовком — сводка очереди: пробито сегодня и за 7 дней, ждут отправки, ждут ответа ОФД, с ошибкой. Каждое число открывает очередь чеков с этим состоянием.

Состояние фискализации: заголовок, продавец в чеке и проверки с кнопками
Состояние фискализации: что мешает, и кнопка рядом с каждой проблемой

Проверки считает сервер при каждом открытии страницы:

ПроверкаЧто значитКнопка
Касса пробивает чекиесть касса АТОЛ с логином, паролем, группой ККТ и ИНН«Кассы» — к списку касс
Связь с ОФДрезультат последней проверки связи и когда она была (хранится неделю)«Проверить»
Чеки не пробиты — попытки исчерпаныотправка не удалась столько раз, сколько задано в «Попыток отправки»; сами такие чеки больше не уйдут. Показывается последняя причина ошибки«Открыть» — очередь с ошибками
Операции ждут отправки с …операции старше срока досылки: автоматика их не трогает, решение за бухгалтерией«Открыть» — очередь ждущих
Нет кассы: организация (N клиентов)у организации с клиентами нет своей кассы и нет общей — чеки её клиентов не пробиваются«Добавить» — окно новой кассы с этой организацией и её ИНН
У кассы выключен боевой режим, ИНН кассы не совпадает с организациейкасса есть, но чеки через неё не уйдут или уйдут с ИНН из реквизитов«Открыть» — окно кассы

Боевой режим включается и выключается кнопкой в этом блоке, а не тумблером в форме. Обе кнопки спрашивают подтверждение и пишут действие в журнал.

Подтверждение выключения боевого режима
Выключение боевого режима
Фискализация на телефоне: кнопки раздела, сводка и состояние
На телефоне кнопки раздела вверху, проверки одна под другой

Какие платежи фискализируем

Настройка — отметки «Источники платежей» в блоке «Что попадает в чек». Отмеченный источник попадает в очередь чеков, снятый не попадает в неё вовсе.

Что попадает в чек: какие платежи, как выглядит чек, очередь и оповещения
«Что попадает в чек»: какие платежи, как выглядит чек, очередь и оповещения
ИсточникКто пробивает чекПо умолчанию
Банковская выпискамыотмечен
ЮKassa, Wallet One, платёжная системаагрегаторснят
Ручная проводка, обещанный платёж, периодические списания—снят

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

Почему источник определяется, а не хранится

В финоперации нет отдельного столбца «источник»: откуда пришли деньги, видно по совокупности признаков — служебному полю оператора, меткам в описании ([bank_op:N], [txn:…]), типу операции и услуге. Эвристика собрана в одном месте, поэтому иконка в списке операций и решение о чеке всегда совпадают. У онлайн-оплат поле оператора пустое — они узнаются по названию системы в описании и по типам операций «Оплата через платежные системы» и «ЮKassa».

Что попадает в чек

Блок из трёх частей. Значения ниже — рекомендация для провайдера, который фискализирует пополнения счёта из банковских выписок. Поля «Провайдер ОФД» и «Опрос ОФД» со страницы убраны в сборке 3136: первое ни на что не влияло (драйвер задаёт тип кассы), второе тоже — статус чеков опрашивается по расписанию раз в 5 минут.

ПолеЧто указатьПочему
Какие платежи
Источники платежей банковская выписка См. выше. Хотя бы один источник обязателен.
Типы операций «Все приходы, кроме обещанного платежа» Источник уже ограничен, поэтому жёсткий список типов не нужен. «Только отмеченные типы» открывает отметки приходных типов — чек пробьётся только по ним (для банковских выписок это «Банковская выписка»).
Как выглядит чек
Куда отправить чек клиенту на e-mail Если нужного контакта в карточке нет, берётся другой.
Запасной e-mail ящик организации для чеков Сюда уходит чек, когда у клиента нет e-mail. Пусто — чек уйдёт на телефон или на e-mail из карточки кассы.
Название позиции
(тег 1030)
Пополнение лицевого счёта, договор {договор} Пополнение счёта — аванс за услуги связи, обобщённая формулировка корректна по 54-ФЗ. Кнопки «номер договора» и «имя клиента» вставляют подстановки, строка «В чеке» под полем показывает пример. Пусто — «Услуги связи / доступ к сети Интернет». До 128 символов.
Брать название из услуги операции по ситуации Если у операции указана услуга, в чек пойдёт её название. У зачислений из банковских выписок услуги нет — для них всё равно берётся поле выше.
Очередь и оповещения
Попыток отправки 5 Сбой отправки повторяется каждые 10 минут, пока не кончатся попытки. После этого чек сам не уйдёт — его отправляют из очереди.
Досылать очередь, дней 3 Операции старше этого срока автоматически не отправляются: чек задним числом — решение бухгалтерии. 0 — досылать любые.
Сообщить о застрявших чеках через, ч 6 Когда у чека кончились попытки и прошло столько часов, в чат администраторов приходит сообщение — не чаще раза в сутки.
Отчёт за день в Telegram, час, чат по желанию Сводка: пробито, ждут, с ошибкой. Чат — номер группы; пусто — общий чат администраторов из настроек Telegram. Отправить сейчас можно со страницы очереди.

Кнопка «Сохранить» активна, только когда в блоке есть изменения. Перед записью показывается их список «было → стало»; если меняются источники или типы операций при включённом боевом режиме, подтверждение выделено красным — правило действует для следующего же платежа. Каждое сохранение попадает в журнал действий теми же словами.

Подтверждение сохранения со списком изменений
Список изменений перед сохранением
Плейсхолдеры в наименовании позиции

Поле «Наименование позиции в чеке» — это не просто статичный текст: в него можно вставить плейсхолдер, и модуль подставит данные конкретной операции при пробитии чека. Так наименование получается персональным для каждого клиента, а не одинаковым на всех чеках.

ПлейсхолдерЧто подставится
{договор}Номер договора клиента (contract_number). Синонимы: {contract}, {номер договора}, <номер договора>
{фио}ФИО / название клиента. Синонимы: {name}, {абонент}

Готовность к боевому режиму

Главный выключатель FISCAL_ENABLED по умолчанию выключен: чеки в ОФД не уходят. Пока он выключен, блок состояния показывает условия ниже: обязательные — красным. Кнопка «Включить боевой режим» при невыполненных условиях называет, чего не хватает; сервер проверяет то же самое и отклонит запрос мимо страницы.

ПунктБлокирует включениеЧто означает
Касса с поддерживаемым типомдатип «Другая» драйвера не имеет
Логин, пароль и группа ККТдабез них ОФД не примет ни одного чека
Связь с ОФДдадля включения нужна проверка не старше 5 минут — нажмите «Проверить связь» прямо перед включением
ИНН продавцадаберётся из реквизитов организации
ИНН касснетсравнивается с ИНН организации кассы; в чек уйдёт ИНН из реквизитов
Источники платежейнетхотя бы один должен быть отмечен

Очередь чеков

Раздел Отчёты → Очередь чеков (/admin/reports/fiscal_queue/) показывает, что именно ждёт отправки. Раньше состояние очереди было видно только строкой счётчиков в настройках, без возможности посмотреть содержимое.

Список построен на единых компонентах: строки подгружаются по мере прокрутки (бесконечная загрузка), действия строки собраны в компактное меню, клик по имени клиента открывает боковую карточку клиента, а на телефоне строки превращаются в карточки с подписями полей. Период задаётся единым выбором дат с пресетами. Клик по имени клиента открывает боковую карточку абонента и сразу прокручивает к блоку «Банк» с его платежами из выписок.

Очередь чеков: состояния, фильтры, список операций с источником и статусом
Очередь чеков: состояния, фильтры, список операций с источником и статусом

Как работает (поток чека)

flowchart LR
  A["Приём оплаты
банковская выписка"] --> B{"Источник
подлежит?"} B -->|"нет — агрегатор"| X["Пропуск: чек бьёт
ЮKassa / Wallet One"] B -->|"да — свой безнал"| C["Движок:
состав чека 54-ФЗ"] C --> D["Очередь чеков"] D --> E["АТОЛ → ОФД"] E -->|"done"| F["Чек клиенту
e-mail / SMS / ЛК"] E -->|"fail"| G["Авто-повтор →
Telegram-алерт"]
  1. Приём оплаты — зачисление банковской выписки создаёт финоперацию.
  2. Движок проверяет источник, сумму и тип операции, собирает состав чека по 54-ФЗ и ставит задачу в очередь.
  3. Очередь отправляет чек в ОФД, опрашивает статус, повторяет при сбоях и шлёт Telegram-алерт на застрявшие чеки.
  4. Чек клиенту — электронный чек на e-mail или телефон, ссылка в личном кабинете и в мобильном приложении, фискальные реквизиты в карточке операции.

Статусы чека

Старые операции автоматика не досылает

Досылаются только свежие — не старше порога FISCAL_PENDING_MAX_AGE_DAYS (по умолчанию 3 дня). По 54-ФЗ чек пробивается в момент расчёта; пробить пачку чеков задним числом — решение бухгалтерии, а не побочный эффект включения тумблера. Такие операции остаются в очереди и отправляются вручную.

Касса (доступ к ОФД)

Список касс показывает организацию, состояние («готова», «не настроена» с перечнем, чего нет, «нет связи», «ИНН не совпадает», «выключена»), боевой режим и источники кассы, ИНН, налогообложение и сколько чеков пробито. Касса открывается кликом по названию или из меню строки — там же «Проверить связь» и «Удалить».

Список касс
Список касс

Окно кассы разбито на три раздела.

Окно кассы, раздел «Подключение»
«Подключение»: тип, адрес сервера, группа ККТ, логин и пароль, тестовый сервер, проверка связи
Окно кассы, раздел «Организация и чек»
«Организация и чек»: чьи реквизиты и какой налог
Окно кассы, раздел «Что пробивает»
«Что пробивает»: боевой режим и источники кассы

Удалить кассу, к которой привязаны операции с чеками или клиенты, нельзя: чек должен ссылаться на кассу, которой пробит. Окно объясняет это и предлагает выключить боевой режим кассы — тогда операции её организации встают в очередь, но чеки не уходят. До сборки 3136 такое удаление заканчивалось ошибкой сервера.

Кассу с чеками удалить нельзя — предложение выключить её боевой режим
Кассу с чеками не удалить — можно выключить её боевой режим

Боевой режим: общий и по кассе

Чек уходит в ОФД, только когда включён и общий рубильник (FISCAL_ENABLED), и боевой режим кассы организации платежа. Касса без явного флага наследует общий — так одна касса работает как раньше, а у нескольких организаций режим и источники независимы.

flowchart TD
  S{"Общий рубильник
FISCAL_ENABLED"} -->|"выключен"| N["Чек не уходит"] S -->|"включён"| K{"Режим кассы
организации"} K -->|"наследует общий"| Y["Чек уходит в ОФД"] K -->|"включён"| Y K -->|"выключен"| N

Права и журнал

Чек в карточке операции

На странице Финансовые операции в карточке есть секция «Чек» со статусом ОФД, номером ФД/ФП и ссылкой на электронный чек. Клиент видит ссылку на чек в личном кабинете и в мобильном приложении.

Налогообложение

При работе на УСН без НДС в чек передаётся признак «НДС не облагается». Ставка НДС и система налогообложения берутся из реквизитов компании (Брендинг); при переходе на ОСН переключатель ставки уже готов.

Подключение кассы клиента — с нуля

Порядок для внедренца: что подписать, где взять доступы, как проверить чек на тестовом контуре и когда включать боевой режим. Шаги 1–3 делает клиент (это его юрлицо, его касса и его договоры), 4–10 — мы.

Касса всегда принадлежит клиенту

Чек пробивается от имени юрлица, которое получило деньги: в чеке его ИНН, его система налогообложения, его фискальный накопитель. Пробивать чеки клиента нашей кассой нельзя — это чужая выручка в нашей отчётности перед ФНС. Поэтому договор с ОФД, регистрация ККТ и доступы к API — всегда на стороне клиента, мы только настраиваем отправку.

Шаг 1. Касса, фискальный накопитель и договор с ОФД

Клиенту нужна облачная касса — физическая ККТ, размещённая в дата-центре оператора и работающая по API. Для приёма платежей за интернет её достаточно: касса не стоит в офисе, чеки уходят абоненту электронно, на почту или телефон.

Что оформляется у оператора облачных касс (в нашем случае АТОЛ Онлайн):

Порядок именно такой: сначала касса и накопитель, затем регистрация в ФНС, и только потом появляются реквизиты доступа к API. «Настроить заранее» не выйдет — до регистрации ККТ группы касс не существует.

Шаг 2. Регистрация ККТ в налоговой

Клиент регистрирует кассу в личном кабинете ФНС: подаёт заявление, получает регистрационный номер ККТ, затем фискализирует накопитель. Нужна квалифицированная электронная подпись руководителя. Оператор облачной кассы обычно проводит процедуру вместе с клиентом.

После регистрации у клиента на руках: заводской номер ККТ, регистрационный номер, номер фискального накопителя и адрес места расчётов. Для облачной кассы адрес места расчётов — это адрес сайта или личного кабинета, через который клиент платит, например https://lk.example.ru.

Шаг 3. Реквизиты доступа к API — где их взять

Логин от личного кабинета АТОЛ — это не доступ к API

Учётная запись, по которой заходят на online.atol.ru/lk, к API отношения не имеет: запрос getToken с ней отвечает «неверный логин или пароль». Реквизиты интеграции выдаются отдельно при подключении услуги «интернет-магазин» и приходят письмом. В интерфейсе личного кабинета раздела с ними нет — если письмо потеряно, доступы восстанавливает поддержка АТОЛ или партнёр, через которого подключались. Этот шаг регулярно оказывается самым долгим, поэтому запрашивать реквизиты стоит в первый же день.

От клиента нужны три значения:

ЧтоКак выглядитГде взять
Логин API строка вида shop-example письмо АТОЛ о подключении интернет-магазина
Пароль API произвольная строка то же письмо; в личном кабинете не показывается
Код группы ККТ имя-магазина_НОМЕР, например smit34-ru_7201 то же письмо. Группа объединяет кассы одного магазина: чек отправляется в группу, а не в конкретную ККТ

Ещё понадобятся ИНН, система налогообложения и ставка НДС клиента — но вносятся они не в карточку кассы, а в реквизиты компании (Брендинг): в чек уходит ИНН оттуда.

Шаг 4. Карточка кассы в биллинге

Настройки → Фискализация (/admin/settings/atol_config/) → добавить кассу. Поля:

ПолеЧто указать
Тип онлайн-кассыАТОЛ. У типа «Другая» драйвера нет — с ним чек не уйдёт, и чек-лист готовности заблокирует боевой режим
Названиепроизвольное, для себя: «Касса ООО Ромашка (АТОЛ Онлайн)»
Логин, Пароль, Группа ККТиз письма АТОЛ (шаг 3)
ИНН организацииИНН клиента. В чек всё равно уйдёт ИНН из реквизитов компании — поле нужно, чтобы чек-лист поймал расхождение
Место размещения ККТадрес места расчётов из регистрации ККТ
Организацияюрлицо, которому принадлежит касса. Ключевое поле, когда организаций несколько — см. шаг 10
Тестовый сервервключить на время настройки: касса переключится на testonline.atol.ru

Адрес сервера отдельно задавать не нужно: он подставляется сам — боевой или тестовый, по этому переключателю. Поле «Адрес сервера» нужно только для нестандартного контура.

Шаг 5. Проверка связи

Кнопка «Проверить связь» запрашивает у ОФД токен и сразу показывает результат. Это единственный способ убедиться, что логин, пароль и группа приняты; без успешной проверки чек-лист готовности не пропустит дальше.

ОтветЧто значит
Связь естьреквизиты верны, токен получен. Результат живёт 5 минут, потом проверку нужно повторить
Неверный логин или парольпочти всегда — попытка использовать учётку личного кабинета вместо реквизитов API (шаг 3)
Ошибка группыопечатка в коде группы либо группа от другого контура: у боевого и тестового серверов они разные

Проверка пишется в журнал аудита — видно, кто и когда трогал кассу.

Шаг 6. Тестовый чек

На тестовом контуре АТОЛ чек не попадает в ФНС и не расходует фискальный накопитель, поэтому пробный прогон делается именно там.

  1. В карточке кассы включён тестовый сервер, реквизиты — тестовые: для testonline.atol.ru АТОЛ выдаёт отдельную пару логин-пароль и свою группу.
  2. Взять любую подходящую операцию прихода — или провести пробное пополнение на небольшую сумму.
  3. Сначала посмотреть, что уйдёт, ничего не отправляя:
    python manage.py fiscalize_finop --op-id 12345 --dry-run
    Команда печатает готовый чек: позиция, сумма, ставка НДС, контакт клиента, реквизиты продавца. Здесь ловятся опечатки в наименовании позиции и неверная ставка.
  4. Отправить пробный чек:
    python manage.py fiscalize_finop --op-id 12345
  5. Проверить результат в разделе Отчёты → Очередь чеков: операция должна пройти «ждёт ответа ОФД» → «пробит», в карточке появятся номер фискального документа, фискальный признак и ссылка на электронный чек.

То же самое можно сделать из интерфейса: в очереди чеков есть отправка по одной операции с подтверждением. Команда удобнее тем, что --dry-run показывает содержимое чека до отправки.

Что проверить в тестовом чеке: наименование позиции — формулировка вида «Пополнение лицевого счёта, договор 12345»; ставку НДС — на УСН должно быть «НДС не облагается»; контакт клиента — куда уйдёт чек, почта или телефон; ИНН продавца — клиента, а не наш.

Шаг 7. Разбор очереди перед запуском

Пока боевой режим выключен, операции всё равно копятся в очереди чеков — это нормально и сделано специально, чтобы ничего не потерялось. Но перед включением очередь нужно разобрать: после включения она начнёт уходить в боевой ОФД.

Шаг 8. Включение боевого режима

Переключение на боевой контур — три действия, и все нужны:

  1. В карточке кассы снять «тестовый сервер» и заменить реквизиты на боевые: тестовые на боевом контуре не работают.
  2. Повторить проверку связи — уже с боевыми реквизитами.
  3. Включить боевой режим. Тумблер ведёт в чек-лист готовности: пока обязательные пункты не выполнены, кнопка заблокирована. Сервер проверяет то же самое — попытка включить режим в обход интерфейса будет отклонена.

Что произойдёт сразу после включения

Накопившиеся операции начнут пробиваться в боевой ОФД, и это необратимо: отменить чек можно только чеком коррекции через налоговую. Именно поэтому шаг 7 идёт раньше шага 8, а не наоборот.

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

Заодно проверьте настройки, определяющие объём чеков: источники платежей — по умолчанию только банковские выписки, поскольку агрегаторы бьют чек своей кассой, — и список типов операций.

Шаг 9. Первый боевой платёж

Запуск считается состоявшимся не по зелёному чек-листу, а по первому реальному чеку. На первом боевом платеже клиента проверьте: операция в очереди перешла в «пробит»; в карточке есть номер фискального документа и ссылка на чек; чек открывается и в нём верные ИНН, наименование позиции и ставка НДС; клиент получил чек на почту или телефон.

Первые сутки полезно держать открытой очередь чеков: застрявшие в ошибке операции подсвечиваются там же, а при включённых Telegram-уведомлениях приходит алерт.

Шаг 10. Несколько организаций

Когда на одной установке работает несколько юрлиц, у каждого своя касса: по 54-ФЗ чек пробивает то юрлицо, которое получило деньги.

Как система выбирает кассу для операции, по убыванию приоритета:

  1. касса, явно указанная в самой финоперации;
  2. касса, закреплённая за клиентом;
  3. касса организации платежа — обычный путь: организация определяется по счёту получателя из банковской выписки;
  4. касса без организации — общая, если у организации своей нет.

Чужой кассой чек не уйдёт

Если у организации нет своей кассы, система не возьмёт кассу соседнего юрлица — только общую, без организации. Иначе в чеке оказался бы неверный ИНН. Поэтому касса заводится вместе с организацией, а не «потом».

Боевой режим и источники платежей задаются и глобально, и на каждой кассе. Чек уходит, когда включены оба: главный выключатель и режим конкретной кассы. Это позволяет запускать новую организацию, не трогая работающие: у её кассы боевой режим пока выключен, у остальных включён. Пустое значение на карточке означает «наследовать глобальную настройку».

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

Короткий чек-лист внедрения

#ШагКтоГотово, когда
1Аренда облачной ККТ, фискальный накопитель, договор с ОФД клиентсчёт оплачен, касса выделена
2Регистрация ККТ в ФНС, фискализация накопителя клиентполучен регистрационный номер
3Реквизиты API: логин, пароль, код группы клиентписьмо АТОЛ передано нам
4Реквизиты компании: ИНН, система налогообложения, ставка НДС мызаполнен брендинг организации
5Карточка кассы, тестовый сервер включён мыкасса сохранена
6Проверка связимы«связь есть»
7Тестовый чек: --dry-run, затем отправка мычек «пробит», реквизиты в нём верные
8Разбор очереди: лишнее снять с фискализации мыв очереди только то, что нужно пробить
9Боевые реквизиты, повторная проверка связи мы«связь есть» на боевом контуре
10Включение боевого режима, первый боевой чек мычек-лист зелёный, клиент получил чек