Платёж картой попадает в вашу бухгалтерию через отчёт эквайера, в котором уже указан заказ. Перевод USDC приходит только с адресом, суммой и хешем транзакции — и ничем больше. Сверка криптоплатежей работает, когда счёт содержит бизнес-референс, потому что сам перевод его передать не может.
Это руководство для финансовых и операционных команд мерчантов, PSP и EMI, которые принимают стейблкоины и получают расчёты в евро. Здесь перечислены поля, которые нужны в записи каждого счёта, порядок работы с частичными платежами и платежами не той монетой, то, как вебхуки и API передают данные в учётную систему, и какие правила ЕС определяют, сколько всё это нужно хранить.
Ключевые моменты
Коротко
- Перевод по стандарту ERC-20 содержит только отправителя, получателя и сумму. Номер заказа должен находиться в счёте, а не в платеже.
- Выставляйте счёт в EUR и отражайте в учёте именно эту сумму в евро. Сумма в криптовалюте — производное число, которое вы сохраняете для аудиторского следа.
- Основная работа приходится на исключения: частичные платежи, истёкшие счета, платёж не той монетой. Проверяйте их ежедневно, а не в конце месяца.
- Используйте вебхук как триггер, перечитывайте счёт по ID как источник истины и каждую ночь выгружайте список счетов как страховку и источник для экспорта в CSV.
Почему сверка криптоплатежей сложнее, чем карточных?#
Сверка криптоплатежей сложнее, потому что в блокчейн-переводе нет поля для номера вашего заказа. В Ethereum стандарт токенов ERC-20 (EIP-20) определяет событие перевода как `Transfer(address _from, address _to, uint256 _value)`: кто отправил, кто получил и какая сумма. Ни memo, ни номера счёта, ни имени клиента там нет.
Банковские и карточные платежи устроены наоборот. В переводе SEPA есть поле назначения платежа, которое заполняет плательщик, а в отчёте о расчётах эквайера каждая операция по карте указана с вашим референсом мерчанта. Ваша бухгалтерская система сопоставляет данные именно по этому референсу.
Со стейблкоинами возникают ещё три сложности:
- Сумма редко бывает круглой. Счёт на 250 EUR, выставленный в USDC, становится числом вроде 279,2846 USDC, поэтому два счёта похожего размера могут выглядеть одинаково.
- Платёж не становится окончательным сразу. Ethereum формирует блок каждые 12 секунд, но, по данным ethereum.org (страница обновлена в октябре 2026 г.), «финализация блока Ethereum занимает примерно 15 минут». Перевод может быть видим и всё же не засчитываться.
- Плательщики ошибаются. Они отправляют меньше, отправляют дважды, отправляют другую монету или платят после истечения срока счёта.
Поэтому связь должна возникнуть до того, как плательщик заплатит: один счёт на один заказ, с вашим ID заказа и собственным платёжным адресом, чтобы каждый входящий перевод попадал в запись, которая уже знает, за что он.
Какие поля нужны в записи каждого криптосчёта?#
Каждый счёт требует фиксированного набора полей, которые связывают четыре вещи: ваш заказ, цену в евро, перевод в блокчейне и итоговый статус. Если одного поля не хватает, кто-то будет сопоставлять данные вручную. В таблице ниже используются названия полей API счетов ItisPay; другие провайдеры называют те же понятия иначе.
| Поле | Что хранит | Зачем это бухгалтерии |
|---|---|---|
| invoice_id | Уникальный ID, который присваивает провайдер | Первичный ключ для каждого поиска и каждой строки в учёте |
| order_id | Номер вашего заказа или договора, уникальный для каждого заказа | Связь с вашей ERP, магазином или CRM; тот референс, который карты дают бесплатно |
| order_name | Краткое описание заказа | Позволяет проверить исключение, не открывая магазин |
| fiat_amount, fiat_currency | Цена в EUR | Выручка, которую вы проводите |
| currency, crypto_amount | Выставленная монета и сумма к оплате | Показывает, что плательщику предложили отправить |
| actual_crypto_amount_paid | Сколько реально поступило | Выявляет недоплату и переплату |
| currency_paid | Использованная монета, если она отличается от выставленной | Отмечает платежи не той монетой для проверки |
| network, address | Блокчейн-сеть и платёжный адрес | Подтверждает, куда были отправлены деньги; нужно для любой трассировки или возврата |
| transactions (tx_hash, amount, status) | Одна строка на каждый входящий перевод | Один счёт может получить несколько переводов; каждый хеш — ваше доказательство в блокчейне |
| status | new, pending, completed, expired, cancelled, paid_partial | Определяет, проводить ли, отгружать, напоминать или закрывать |
| created_at, updated_at, expires_at | Временные метки | Отсечка на конец месяца и доказательство времени оплаты заказа |
Две из них делают большую часть работы. `order_id` — это референс, который блокчейн-перевод не может передать, поэтому задавайте его из собственной системы и делайте уникальным для каждого заказа, а не для каждого клиента. Список `transactions` важен, потому что счёт не всегда оплачивается за один раз: каждый перевод получает собственную строку с хешем и статусом, так что видно, из каких переводов складывается оплаченная сумма.
Храните сумму в криптовалюте со всеми знаками после запятой в отдельном столбце. Ваша главная книга ведётся в евроцентах; криптостолбцы — это доказательство, а не балансовые значения.

Какую сумму в евро отражать в учёте?#
Отражайте в учёте цену в евро, указанную в счёте. Когда счёт выставлен в EUR, провайдер пересчитывает его в криптовалютную сумму по текущему курсу, и плательщик отправляет именно эту сумму. Если платёж зачисляется на ваш счёт в евро, сумма в евро в счёте и есть ваша выручка, а криптовалютная сумма — техническая деталь того, как платёж поступил.
Именно поэтому команды, которые принимают криптоплатежи автоматически с конвертацией в EUR, редко нуждаются в криптоучёте вообще: на балансе нет монеты, которую нужно оценивать на конец месяца.
Всё меняется, если вы держите стейблкоины. Комитет по интерпретациям МСФО решил в июне 2019 года, что криптовалютные активы подпадают под МСФО (IAS) 2 «Запасы», если они удерживаются для продажи в ходе обычной деятельности, и под МСФО (IAS) 38 «Нематериальные активы» в остальных случаях. Его определение криптовалюты исключает активы, которые создают договорные отношения между держателем и другой стороной. USDC устроен иначе: Circle заявляет, что он «погашается 1:1 в долларах США», а с июля 2024 года Circle выпускает USDC и EURC в ЕС как токены электронных денег (e-money tokens) по лицензии на электронные деньги французского регулятора ACPR. Как классифицировать удерживаемый стейблкоин — вопрос к вашему аудитору. Расчёт в EUR сразу после получения снимает этот вопрос.
Как обрабатывать частичные платежи и неверную монету?#
Каждый счёт не в статусе `completed` считайте исключением, у которого есть ответственный и срок. Основные усилия по сверке криптоплатежей уходят именно сюда; полностью оплаченный счёт сходится сам.
Ниже приведено, что каждый статус означает для финансов, на примере статусов ItisPay:
| Статус | Что произошло | Что делают финансы | Отгрузка или освобождение? |
|---|---|---|---|
| new | Счёт открыт, ничего не получено | Нечего отражать | Нет |
| pending | Перевод виден, но ещё не окончательный | Дождаться изменения статуса | Нет |
| completed | Оплачено полностью | Отразить выручку по цене в EUR, освободить заказ | Да |
| paid_partial | Поступила часть суммы | Запросить остаток, вернуть средства или закрыть по соглашению | Зависит |
| expired | Время истекло без полной оплаты | Закрыть заказ; проверить поздние переводы | Нет |
| cancelled | Вы аннулировали счёт | Записи нет; выставить повторно, если клиент всё ещё хочет платить | Нет |
Частичные платежи#
Частичный платёж обычно означает, что кошелёк или биржа плательщика удержали комиссию с суммы, либо плательщик ввёл сумму неверно. ItisPay учитывает каждый перевод отдельно, поэтому второй перевод может закрыть счёт. У счёта также есть настройка `allowed_error_percent`: небольшое допустимое отклонение, задаваемое для каждого счёта, так что платёж, немного не дотягивающий до суммы, всё равно считается оплаченным. Задайте её один раз как политику, например на уровне, который вы списали бы и при банковском переводе, и не меняйте от случая к случаю.
Если остаток так и не поступил, решите в течение фиксированного числа дней: примите недостачу и спишите её, верните полученное или отмените заказ. Запишите решение в карточку счёта, чтобы аудитор видел, почему на оплаченном заказе денег меньше.
Неверная монета или поздний платёж#
Когда плательщик отправляет стейблкоин, отличный от указанного в счёте, это видно в поле `currency_paid`. Не отражайте такой платёж автоматически: проверьте сумму и стоимость в евро, затем примите его или верните. Перевод на истёкший счёт устроен похоже. Деньги уже в блокчейне, но ваш заказ закрыт, поэтому кто-то должен решить, открыть ли заказ заново или вернуть средства. Если заказ аннулирован на вашей стороне, отмените счёт через API (обновлением статуса), чтобы ваши записи показывали его закрытым до того, как придёт поздний платёж.
Как вебхуки и API должны питать сверку криптоплатежей?#
Используйте три уровня: вебхук сообщает, что что-то изменилось, повторное чтение счёта показывает, что действительно произошло, а ночная выгрузка всех счетов ловит всё, что пропустили первые два.
- Каждый счёт может содержать `callback_url`; провайдер отправляет туда обновления статуса. Воспринимайте сообщение как триггер, а не как доказательство.
- При каждом вебхуке вызывайте `GET /invoices/{invoice_id}` и действуйте по статусу и суммам из этого ответа. Это защищает от поддельных или повторно отправленных вызовов вашего endpoint, так как запрос к API требует вашего API-ключа.
- Сделайте обработчик идемпотентным: один и тот же статус может прийти дважды. Привязывайте запись в учёте к `invoice_id` и статусу, чтобы повтор ничего не менял.
- Каждую ночь запрашивайте счета, отсортированные по `updated_at` от новых к старым, и листайте назад до вашего последнего запуска; также перепроверяйте каждый счёт, который всё ещё в статусе `new`, `pending` или `paid_partial`. Сверяйте их с вашим учётом. Всё, что оплачено в записях провайдера, но открыто у вас, — исключение.
Для тестирования ItisPay предоставляет endpoint, который имитирует изменение статуса счёта, и endpoint, который повторно отправляет последний вебхук по `invoice_id` или `order_id`. Используйте повторную отправку, если ваш сервер был недоступен. Команды, которые направляют несколько способов оплаты через один слой оркестрации платежей, применяют тот же подход ко всем каналам.

Как собрать CSV-экспорт для бухгалтерии?#
Постройте экспорт из API списка счетов: одна строка на счёт плюс одна строка на перевод. В ItisPay `GET /invoices` фильтрует по статусу, монете и дате создания, сортирует по дате или сумме и возвращает до 100 счетов на страницу вместе с количеством страниц. Небольшой скрипт может пройти по страницам за день или месяц и записать колонки из таблицы полей выше.
Два файла удобнее одного:
- `invoices.csv`: invoice_id, order_id, fiat_amount, fiat_currency, currency, crypto_amount, actual_crypto_amount_paid, status, created_at, updated_at. Этот файл бухгалтер импортирует и сверяет с продажами.
- `transfers.csv`: invoice_id, tx_hash, amount, currency, transfer status, time. Это файл-подтверждение для аудитора.
Импортируйте файл счетов в бухгалтерскую систему так же, как отчёт о расчётах по картам: одна строка на заказ, в евро, с ID заказа в качестве ключа сверки.
Какие правила ЕС определяют учёт криптоплатежей?#
Три правила ЕС задают контекст. Ни одно из них не делает продавца поставщиком услуг в сфере криптоактивов (CASP), но они определяют, какие данные существуют и как долго их хранят.
- Регламент о переводе средств (EU) 2023/1113. С 30 декабря 2024 г. CASP плательщика обязан обеспечить, чтобы каждый перевод сопровождался информацией о плательщике и получателе, например именами и адресами в распределённом реестре (статья 14). Данные следуют за переводом, а не находятся внутри него. Для переводов свыше 1 000 EUR на самостоятельно управляемый кошелёк или с него провайдер соответствующей стороны должен оценить, принадлежит ли этот кошелёк его клиенту (статьи 14 и 16). Это задача лицензированного провайдера, и это одна из причин, по которым платёж может находиться на проверке.
- Хранение записей. Согласно действующей директиве AML (EU) 2015/849, статья 40, обязанные лица хранят записи о транзакциях в течение пяти лет после окончания деловых отношений или совершения операции. Новый регламент AML (EU) 2024/1624 сохраняет пятилетний срок (статья 77) и применяется с 10 июля 2027 г.
- DAC8, директива (EU) 2023/2226. С 1 января 2026 г. CASP сообщают налоговым органам о криптотранзакциях своих пользователей. Ваши собственные записи должны совпадать с тем, что сообщает ваш провайдер.
Если вы работаете через лицензированного партнёра, партнёр несёт обязанности CASP по MiCA и этим правилам, как объясняется в нашем руководстве по лицензии MiCA CASP. Ваши записи о заказах и ваша часть цепочки подтверждений остаются у вас.
Где сверка криптоплатежей всё ещё требует участия человека?#
Автоматизация справляется со случаем полной оплаты. Остальное требует назначенного ответственного и короткой письменной политики.
Где это не помогает
- Возвраты — это новые исходящие переводы, а не отмены. Им нужна выплата на адрес или IBAN и собственные записи.
- Плательщика, который отправляет со счёта на бирже, не всегда можно установить по адресу отправителя. Сопоставляйте по счёту, а никогда по отправителю.
- Платежи по просроченным счетам, дублирующие платежи и неверные монеты требуют решения человека.
- Комиссии сети и округление дают небольшие расхождения. Один раз определите допустимое отклонение и придерживайтесь его.
Ежедневная рутина сверки криптоплатежей в пять шагов#
Короткая ежедневная процедура превращает закрытие месяца в формальность:
- Получите через API счета, созданные или обновлённые с момента последнего запуска, и обновите файлы счетов и переводов.
- Проверьте, что у каждого счёта со статусом `completed` есть соответствующий оплаченный заказ в вашем магазине или ERP, и наоборот.
- Разберите список исключений: `paid_partial`, платежи по просроченным счетам, неверные монеты. Закройте каждую запись письменным решением.
- Сверьте зачисление в евро на вашем банковском счёте с суммой завершённых счетов за период. Если расчёты идут на IBAN, то виртуальные IBAN помогают разделять потоки по направлениям бизнеса.
- Архивируйте оба файла не менее пяти лет.
Если вы хотите принимать стейблкоины и получать евро, не выстраивая этот стек самостоятельно, ItisPay предоставляет API, выставление счетов и данные для сверки: ID счетов и заказов, хеши по каждому переводу, статусы и вебхуки. Лицензирование, KYC и расчёты на ваш IBAN проходят через нашего партнёра с лицензией ЕС, являющегося CASP и платёжным учреждением, и большинство команд проходят путь от KYB до первой транзакции менее чем за неделю.
Эта статья носит исключительно информационный характер и не является юридической или регуляторной консультацией.


