Nordlet

← Блог

Double-Entry Ledger API для бухгалтерии маркетплейсов

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

Nordlet Team · · 11 мин. чтения

Большинство маркетплейсов осознают, что у них проблемы с бухгалтерией, по одному и тому же сценарию: появляется новый финансовый специалист, открывает таблицу выплат и задает вопрос о том, кто именно ведет учет задолженности перед продавцами в промежутке между моментом оплаты покупателем и моментом списания средств со счета платформы. Инженерная команда указывает на таблицу transactions. Финансист возражает, что таблица событий не является бухгалтерской книгой. Этот разрыв между данными о событиях и реальным бухгалтерским учетом призван устранить API книги учета методом двойной записи (double-entry ledger API).

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

Что на самом деле представляет собой API книги учета методом двойной записи

API книги учета методом двойной записи представляет собой программируемый бухгалтерский движок, доступный по протоколу HTTP. Каждое финансовое событие, регистрируемое вашей платформой, записывается в виде сбалесированной проводки: как минимум один дебет и один кредит равной суммы, отраженные по именованным счетам в плане счетов (chart of accounts). API проверяет этот баланс в момент записи и сохраняет проводки таким образом, чтобы их нельзя было незаметно изменить в дальнейшем.

Концепция «двойной записи» основана на проверенном веками правиле бухгалтерии, согласно которому каждая транзакция затрагивает как минимум два счета. Термин «API» означает, что инициатором вызова выступает ваша программа, а не бухгалтер-человек. «Неизменяемость» (immutability) означает, что исправления вносятся через сторно (reversing entries), а не путем редактирования истории. В совокупности эти три свойства превращают учетные данные в надежную финансовую отчетность, готовую к аудиту, а не просто в упорядоченный лог.

Полезное рабочее определение:

API книги учета методом двойной записи принимает финансовые события от вашего приложения, преобразует каждое из них в сбалансированную проводку по заданному плану счетов, сохраняет эти проводки в неизменяемом виде и предоставляет доступ к полученной главной книге (ledger), оборотно-сальдовой ведомости (trial balance) и финансовым отчетам через предсказуемые эндпоинты.

Платформа Nordlet создана ровно вокруг этой идеи: реальная бухгалтерия через API, где главная книга, логика НДС, выставление счетов и сверка доступны через тот же набор эндпоинтов, с которым ваше приложение уже взаимодействует.

Почему маркетплейсам это нужно в первую очередь

SaaS-компания с одним продавцом зачастую может обойтись синхронизацией данных с бухгалтерской программой раз в день. Маркетплейсы не могут позволить себе такую роскошь по трем причинам.

Во-первых, они находятся в самом центре денежных потоков. Покупатель платит платформе, платформа удерживает средства, а затем выплачивает их продавцам за вычетом комиссий. Каждое из этих перемещений представляет собой отдельное бухгалтерское событие, затрагивающее разные счета: денежные средства, кредиторскую задолженность перед продавцами, выручку платформы, НДС к уплате, резервы на возвраты. Таблица payments со столбцом status не способна это отразить.

Во-вторых, они работают в разных налоговых юрисдикциях. Европейский маркетплейс с продавцами в Литве, Германии и Польше, а также покупателями по всему блоку, обязан применять правильный режим НДС для каждой транзакции, проверять налоговые номера продавцов через VIES и формировать отчетность, удовлетворяющую местные налоговые органы. Попытки реализовать это в коде приложения с последующей сверкой в сторонней бухгалтерской системе — это то место, где у большинства маркетплейсов незаметно ломается учет.

В-третьих, объемы данных не подходят для ручного бухучета. Платформа, совершающая десять тысяч заказов в месяц, генерирует десятки тысяч проводок. Этот процесс должен быть полностью автоматизирован от начала и до конца, иначе финансовый отдел станет узким горлышком для роста бизнеса.

Как работает API: по шагам

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

1. Ваше приложение генерирует финансовое событие. Покупатель завершает оформление заказа. Бэкенд вызывает API книги учета, передавая такие данные, как: ID заказа, покупатель, продавец, сумма брутто, ставка НДС, комиссия платформы, валюта и ключ идемпотентности (idempotency key).

2. Книга учета формирует проводку. API преобразует это событие в дебетовые и кредитовые записи. Для стандартной продажи на маркетплейсе это может означать дебетование счета денежных средств в пути, кредитование счета кредиторской задолженности перед продавцом на сумму нетто, кредитование счета выручки платформы на сумму комиссии и кредитование счета НДС к уплате на сумму налога. Все сбалансировано. Все проведено атомарно.

3. Проводка записывается в неизменяемом виде. После проведения запись получает идентификатор и временную метку, после чего ее нельзя отредактировать. Если допущена ошибка, вы создаете проводку сторно и корректирующую проводку. Ради этого аудиторского следа (audit trail) все и затевается.

4. Нисходящие отчеты обновляются в режиме реального времени. Оборотно-сальдовая ведомость, остатки задолженности перед продавцами, сводки по НДС и отчет о прибылях и убытках (P&L) отражают новую запись немедленно. Никаких ночных задач, экспорта или окон сверки, в течение которых цифры «устаканиваются».

5. Вебхуки (webhooks) уведомляют вашу систему. Такие события, как sale_invoice.paid или bank_transaction.matched, отправляются на ваши эндпоинты, позволяя приложению реагировать без использования пуллинга (polling). В сочетании с ключами идемпотентности это означает, что повторные попытки запросов безопасны, а дубликаты не проскочат при сбоях в сети.

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

Проектирование плана счетов

Основная интеллектуальная работа при настройке книги учета для маркетплейса заключается в проектировании плана счетов. Это список именованных категорий, по которым распределяются дебеты и кредиты: счета учета денежных средств в разрезе банков, счета кредиторской задолженности перед продавцами (часто по одному на продавца или один общий со вспомогательными субсчетами), выручка платформы по категориям, НДС к уплате по странам, резервы на возвраты, резервы на чарджбэки и так далее.

Несколько паттернов, которые повторяются на разных маркетплейсах:

  • Средства продавцов — это обязательство, а не выручка. Деньги, которые вы удерживаете от имени продавцов, являются кредиторской задолженностью. Учет их в качестве выручки с последующим отражением выплаты в виде расходов — это классическая ошибка, которая всплывает при Due Diligence.
  • НДС — это отдельное обязательство для каждой страны. Если вы работаете в нескольких юрисдикциях ЕС, вам понадобятся отдельные счета НДС к уплате по каждой стране, чтобы отчетность формировалась корректно.
  • Комиссии должны учитываться в момент их заработка, а не в момент выплаты. Метод начислений (accrual accounting) здесь обязателен.
  • Возвраты, чарджбэки и споры требуют собственных счетов, чтобы отчет о прибылях и убытках отражал реальность, а не хаос из положительных и отрицательных продаж.

Хороший API книги учета позволяет определить эту структуру один раз, а затем уверенно проводить через нее операции, избавляя вас от необходимости изобретать бухгалтерскую логику внутри кода чекаута.

Неизменяемость, закрытие периодов и почему это важно для аудиторов

Неизменяемость (immutability) звучит как техническая особенность базы данных. На практике это граница между книгами учета, которые аудитор утвердит, и теми, которые он забракует.

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

Для платформ, которые планируют привлекать инвестиции, продаваться или проходить налоговый аудит, это не приятная опция, а то, что делает бухгалтерию защитимой. Книга учета Nordlet спроектирована с учетом этого требования по умолчанию: неизменяемая структура двойной записи и закрытие периодов встроены в систему изначально, а не прикручены поверх нее.

НДС в ЕС: то, что съедает инженерные ресурсы

НДС — это аспект, на котором спотыкается большинство проектов по внедрению бухгалтерии на маркетплейсах. Правила здесь не ограничиваются простым применением процентной ставки. Они зависят от того, где находится покупатель, где находится продавец, что именно продается, зарегистрирован ли продавец в качестве плательщика НДС, выступает ли маркетплейс налоговым агентом (deemed supplier) в соответствии с правилами электронной коммерции 2021 года, и какой режим отчетности применяется на местном уровне.

Надежный API книги учета для ЕС как минимум поддерживает:

  • Проверку через VIES для налоговых номеров продавцов и покупателей, в идеале с кэшированием результатов и фиксацией их в транзакции.
  • Логику ставок НДС по странам, включая пониженные ставки и льготы.
  • Генерацию реестров i.SAF для литовской отчетности и аналогичных структурированных форматов, требуемых другими странами-членами ЕС.
  • Электронное выставление счетов Peppol BIS 3.0 для юрисдикций, переходящих на обязательный электронный документооборот.
  • Обработку OSS/IOSS для трансграничных B2C-продаж.

Реализация этого функционала в коде приложения для каждой страны — это объем работы целой инженерной команды, который никогда не заканчивается, поскольку правила постоянно меняются. Перенос этой логики на уровень книги учета — прагматичный выбор.

Где проявляется экономия времени благодаря сверке

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

Реалистичный сценарий предполагает не «нулевой объем ручной работы», а «автоматическое выявление исключений». Процесс сверки в один клик для 90% транзакций, которые идеально совпадают, плюс очередь из 10% случаев, требующих решения человека, — это примерно то, что обеспечивает качественно спроектированный API сверки. Интеллектуальное сопоставление платежей обрабатывает частичные оплаты, переплаты и платежи, покрывающие несколько счетов, без необходимости писать правила для каждого отдельного случая.

Экспорт SEPA (в формате pain.001) для выплат поставщикам и продавцам замыкает цикл на стороне исходящих платежей. Вы одобряете выплаты в своем продукте, книга учета генерирует файл SEPA, ваш банк обрабатывает его, и полученное движение средств автоматически сверяется обратно.

Разработка своими силами, покупка или встраивание

Команды маркетплейсов обычно рассматривают три пути. Ниже приведено их сравнение по ключевым критериям.

Подход Время до запуска Готовность к аудиту Обработка НДС в ЕС Интеграция в продукт
Собственная разработка От 12-24 месяцев Полностью зависит от команды Реализуется самостоятельно для каждой страны Да
Синхронизация с Xero/QuickBooks Недели Хорошо для бухгалтерии, плохо для специфики маркетплейсов Частично, требуются дополнения Нет, работает в стороннем инструменте
Встраивание API книги учета (например, Nordlet) Недели Встроено через неизменяемую книгу и закрытие периодов Встроено для ЕС, включая VIES и i.SAF Да, через API и SDK

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

Встраивание API-first книги учета — это то направление, к которому склоняются большинство современных платформ. Бухгалтерские книги живут внутри интерфейса вашего продукта, продавцы видят собственные финансы в вашем UI, а сложная инфраструктурная рутина по соблюдению требований законодательства решается на уровне платформы.

На что обратить внимание при оценке API книги учета

Короткий чек-лист, который полезно держать под рукой во время звонков с поставщиками решений:

  • Неизменяемое хранилище двойной записи с исправлениями через проводки сторно, а не редактируемые строки.
  • Закрытие периодов с логированием действий по их открытию.
  • Ключи идемпотентности для каждого эндпоинта записи.
  • Вебхуки для событий, на которые ваше приложение должно реагировать, а не только API для опроса (поллинга).
  • Типизированные SDK для языков программирования, которые действительно использует ваша команда.
  • Логика НДС по странам, включая VIES, i.SAF (или аналоги) и режимы OSS/IOSS.
  • Поддержка нескольких юридических лиц (multi-company), если вы управляете несколькими компаниями или планируете это делать.
  • Ролевая модель доступа, достаточно гранулированная для разделения разработчиков, бухгалтеров и пользователей с правами просмотра.
  • Экспорт отчетов в форматах XLSX, PDF и JSON с уведомлениями через вебхуки о готовности больших отчетов.
  • Песочница (sandbox), полностью повторяющая поведение продакшена, а не урезанная демоверсия.

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

С чего начать: план действий

Если маркетплейс начинает эту работу с нуля, последовательность шагов, которая сбережет максимум нервов, выглядит так:

  1. Набросайте реальные денежные потоки на маркерной доске перед тем, как писать код. Кто кому должен, в какой момент, в какой валюте и с каким налогообложением по НДС.
  2. Спроектируйте на основе этой схемы план счетов. Кредиторская задолженность продавцов, выручка платформы, НДС к уплате по странам, резервы. Привлеките бухгалтера для проверки до запуска в продакшен.
  3. Выберите подход к реализации книги учета (разработка, синхронизация или встраивание). Будьте честны в оценке того, что ваша команда действительно сможет создать и поддерживать.
  4. Реализуйте один сквозной сценарий: от заказа до инвойса, выплаты и сверки. Убедитесь, что баланс сходится. После этого масштабируйте решение.
  5. Включите закрытие периодов сразу после того, как первый месяц будет успешно закрыт без расхождений. Финансовая дисциплина будет накапливаться.

Команды, которые делают все правильно, относятся к книге учета как к базовой инфраструктуре, а не как к второстепенному инструменту отчетности. Именно этот сдвиг в мышлении позволяет вести разговор с аудитором, инвестором или налоговой коротко и конструктивно.

FAQ

Является ли API книги учета методом двойной записи тем же самым, что и бухгалтерская интеграция?

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

Разве нельзя использовать отчетность Stripe или Adyen?

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

Насколько неизменяема неизменяемая книга учета на практике?

Записи нельзя отредактировать. Исправления представляют собой новые записи, ссылающиеся на исходные. Это архитектурное решение, а не технологическое ограничение. Любое надежное решение будет придерживаться этого правила. Важность этого подхода заключается в том, что аргумент «мы отредактировали запись, чтобы она сошлась с банком» — это именно то, что делает бухгалтерские книги недостоверными.

Как быть с маркетплейсами за пределами ЕС?

Механика двойной записи универсальна, в отличие от налоговой логики. API книги учета, настроенное под европейский НДС, отлично справится с операциями внутри ЕС и сможет поддерживать операции за его пределами, но если ваш основной рынок — это налог с продаж (sales tax) в США или режимы электронной коммерции в Латинской Америке, предварительно убедитесь в наличии нужного покрытия требований комплаенса.

Сколько времени занимает внедрение?

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