директор и машина · финансы · запись № 037 · · Давид Герштейн
Сверка платежей: где расходятся цифры CRM и бухгалтерии
Расхождения между CRM и бухгалтерией чаще всего возникают не из-за воровства, а из-за трёх вещей: даты сделок технически съезжают при синхронизации на 18–36 часов, момент признания дохода в CRM и в кассе не совпадает, возвраты нигде не фиксируются отдельным регистром. Сверка работает, если строить её на регулярных выгрузках и автоматическом сравнении, а не на доверии к интерфейсу CRM.
Содержание · 8 разделов
- Момент признания дохода — главный источник расхождений
- Возвраты как чёрная дыра учёта
- Технические сбои, которые выглядят как финансовые дыры
- Механика сверки платежей и CRM: что → чем → куда
- ИИ-связка: как автоматизировать сопоставление CRM и кассы
- Экономика: что стоит и что даёт
- Что делать, если расхождения уже накопились
- Чек-лист: с чего начать в понедельник
Сверка платежей и CRM обычно выглядит формальностью — пока не начинает всплывать необъяснимая разница в цифрах. Разработчик настроил бота на ежечасную выгрузку данных из CRM и сравнение с предыдущей версией. Через несколько часов после синхронизации сделки «переезжали» в другие дни — сдвиг от 18 до 36 часов. В моменте версия показывала правильные даты, потом цифры расходились сами собой. Никто это не трогал руками. Просто так работала синхронизация.
Это частный случай общей проблемы. Сверка платежей в компаниях среднего размера почти никогда не заканчивается словами «всё сошлось». Обычно она заканчивается вопросом «а почему у нас заметное расхождение, и с какого месяца оно копится». Если сверку делает человек вручную — это полтора-два часа в день на поиск расхождений, письма с уточнениями, ожидание ответа от смежного отдела. При типичной часовой ставке такого сотрудника это выливается в кратные десятки часов в месяц, потраченные только на поиск расхождений, — притом что сверка всё равно опаздывает на месяц-два от момента, когда деньги реально разошлись.
Я собрал несколько историй с рабочих встреч — все они об одном: CRM и бухгалтерия смотрят на одну и ту же сделку с разных точек, и точки эти системно не совпадают. Ниже — где конкретно расходится, как это чинить механикой, а не разговорами, и во что это обходится, если не чинить вообще.
Момент признания дохода — главный источник расхождений
Классический разговор с одного из разборов: менеджер хочет получить бонус в момент подписания договора с клиентом, не дожидаясь платежа. Ему возражают — в компании есть контролирующее лицо, подчинённое напрямую топ-менеджменту, которое отслеживает такие расхождения и докладывает наверх. В итоге договорились считать по факту получения платежа.
Это не бюрократическая придирка. Если CRM признаёт доход в момент подписания, а касса — в момент поступления денег, зазор между «продано» и «оплачено» будет всегда. В отчёте для собственника этот зазор может выглядеть как воровство, хотя это просто разные точки отсчёта в двух системах, которые никто не свёл в одну методологию.
Пример с криптовалютным возвратом
Клиент внёс предоплату криптовалютой, компания получила сумму заметно больше исходной — курсовая разница на входе дала прирост около 10%. Позже клиент потребовал полный возврат в течение дня той же криптовалютой, ссылаясь на обещание менеджера. Руководитель решил вернуть клиенту сумму, удержав примерно пятую часть на расходы и бонус, чтобы избежать судебного разбирательства.
С точки зрения сверки: в CRM по сделке проходит одна сумма, в кошельке — другая на входе и третья на выходе, а разница нигде не документируется как отдельная операция. Если не завести это явным полем «удержано за расходы и бонус», при следующей сверке кто-то откроет выписку, увидит недостачу и начнёт разбираться с нуля — без единой точки, где записана причина.
Возвраты как чёрная дыра учёта
Отдельная история: реферальная программа, где партнёры задерживают информацию о вознаграждениях до момента, когда клиент сам запросит возврат денег. Пока никто не спрашивает — деньги как бы «не начислены». В момент запроса выясняется, что обязательство уже давно возникло, просто о нём не сообщили.
Решение технически простое: автоматизация уведомлений в боте, которая мгновенно информирует партнёров о закрытии проекта реферала — настройка заняла около 20 минут работы. Но это чинит только один канал. По другому направлению звучит прямая цитата с разбора: «Возвраты абсолютно никак не фиксируются, никто никак не ведёт, никто не отвечает. Нужен инструмент, нужен регламент».
Если возвраты — единственный процесс без владельца, они всегда будут точкой расхождения между тем, что видит продажник в CRM (сделка закрыта, деньги пришли), и тем, что видит бухгалтерия (часть денег уже ушла обратно).
Технические сбои, которые выглядят как финансовые дыры
Отдельная категория проблем — не про людей, а про то, как работают сами системы. Платёж перенесли, но система не подхватила его автоматически — заявку нужно было заново запускать руками. Никто этого не сделал, платёж, согласованный на понедельник, завис, и рекламная кампания чуть не встала: на счёте не хватало денег.
С точки зрения CRM сделка отмечена «оплата запланирована». С точки зрения кассы денег нет вообще, потому что заявка технически «зависла», и никто не заметил, что её нужно поднять заново. Это тот же тип бага, что и сдвиг дат — я разбирал похожий случай отдельно: CRM врёт, и что делать, если от неё зависят деньги. Разница между «система показывает» и «система сделала» — то место, где сверка обязана быть регулярной, а не разовой.
В мае так же не вовремя выплатили финансирование части рекламных кампаний. Рекламные площадки работают на предоплате, поэтому задержка платежа привела не просто к паузе, а к тому, что кампании начали хуже отрабатывать после возобновления. В CRM это никак не отразилось — сделки как шли, так и идут. А в реальности конверсия просела из-за финансового сбоя, который бухгалтерия видела, а маркетинг — нет.
| Тип расхождения | Что происходит на практике | Что чинит |
|---|---|---|
| Дата сделки сдвигается | Синхронизация CRM меняет дату создания/закрытия задним числом на 18–36 часов | Регулярная выгрузка и сравнение версий (бот раз в час) |
| Момент признания дохода | Бонус считается по дате договора, деньги приходят позже или не приходят вовсе | Единая методология: начисление только по факту поступления |
| Возврат не зафиксирован | Клиенту вернули часть суммы, в CRM сделка осталась «оплачена полностью» | Отдельная операция «возврат» с обоснованием суммы |
| Платёж не переисполнился | Заявка на перенесённый платёж требует ручного повторного запуска | Автоматический повтор вместо ручной переинициализации |
Механика сверки платежей и CRM: что → чем → куда
Рабочая последовательность, которую можно повторить с любой командой из бухгалтера и разработчика:
- Что: выгрузка сделок и платежей за период. Чем: Bitrix24 REST API (метод
crm.deal.list) для CRM-стороны плюс банковская выписка или выгрузка из 1С для кассовой стороны. Куда: промежуточная таблица — Google Sheets на старте, база данных, когда объём вырастет. - Что: сопоставление по сумме, контрагенту и периоду с допуском на курсовые и комиссионные расхождения. Чем: скрипт-обвязка плюс модель для нечётких случаев — частичные оплаты, разное написание контрагента, объединённые платежи. Куда: лист или таблица «Расхождения» с типом и суммой отклонения.
- Что: классификация каждого расхождения — дата съехала, доход не признан, возврат не зафиксирован, технический сбой платежа. Чем: тот же ИИ-модуль по фиксированным правилам. Куда: тикет в CRM или карточка задачи финансисту.
- Кто и когда смотрит: финансист — ежедневно, руководитель отдела — на еженедельном разборе. В одной из компаний время финансового планирования специально перенесли с утра на 13:00 четверга, чтобы к моменту разбора данные успевали собраться полностью, а не наполовину.
Похожий принцип действует и для дебиторки: руководителю отдела поставили задачу ежедневно отслеживать три метрики — объём задолженности, распределение по срокам возникновения, распределение по пакетам услуг, — и держать их постоянно видимыми в отчётности, а не собирать раз в месяц перед совещанием. Логику разбора дебиторки без ручного контроля я раскладывал отдельно: дебиторка под контролем без памяти людей.
ИИ-связка: как автоматизировать сопоставление CRM и кассы
Схема конвейера простая: почасовой или ежедневный вебхук из CRM → таблица с историей версий → сравнение текущей и предыдущей выгрузки → модель классифицирует найденные отклонения → уведомление финансисту при превышении порога.
Для шага классификации не нужна дорогая модель — задача сводится к сопоставлению по чётким правилам, а не к творческой генерации. Дешёвая модель уровня GPT-4o-mini справляется с этим за секунды и стоит копейки на тысячи строк. Дорогую модель имеет смысл подключать только там, где нужно разобрать неструктурированный комментарий менеджера о причине расхождения — это отдельный, более редкий шаг.
Ты — модуль сверки платежей. На входе два JSON-массива:
1) deals — сделки из Bitrix24 (поля: ID, OPPORTUNITY, DATE_CREATE,
DATE_MODIFY, STAGE_ID, CONTACT_ID, prev_date_create — дата создания
из предыдущей выгрузки для той же сделки);
2) payments — платежи из банковской выписки (поля: date, amount,
purpose, counterparty).
Данные:
deals: {{deals_json}}
payments: {{payments_json}}
Задача:
1. Сопоставь сделки и платежи по сумме (допуск ±1%) и контрагенту.
2. Если сделке из CRM не найден платёж в течение 5 рабочих дней
после DATE_MODIFY при статусе "оплата ожидается" — пометь как
риск "платёж_не_найден".
3. Если платёж найден, но сумма отличается более чем на 1% —
пометь как риск "расхождение_суммы" и укажи разницу.
4. Если DATE_CREATE отличается от prev_date_create — пометь как
риск "дата_сдвинулась" и укажи сдвиг в часах.
5. Верни только JSON-массив расхождений без пояснений и без markdown.
Пример ответа модели на реальной структуре данных:
[
{"deal_id": "48213", "type": "дата_сдвинулась", "shift_hours": 36},
{"deal_id": "48250", "type": "платёж_не_найден", "amount": "заметная для месячного оборота", "days_overdue": 6},
{"deal_id": "48266", "type": "расхождение_суммы", "crm_amount": "плановая", "payment_amount": "меньше на несколько процентов", "diff": "заметная для сделки такого размера"}
]
Так выглядит итоговый отчёт, который финансист открывает по утрам вместо разбора сырых таблиц:
| Сделка | Тип риска | Статус |
|---|---|---|
| 48213 | дата сдвинулась | проверить |
| 48250 | платёж не найден | просрочен 6 дн |
| 48266 | расхождение суммы | в пределах порога |
Инженерная обвязка: скрипт крутится по расписанию — облачная функция или сервер компании, запуск раз в час, дёргает Bitrix24 REST API и выгрузку из банка/1С. История версий хранится в отдельной таблице, чтобы было с чем сравнивать текущую дату создания. При ошибке вебхука — таймаут или 5xx от Bitrix24 — три повторные попытки с интервалом 5 минут, после чего алерт в телеграм-канал финансиста. Отдельный алерт — если сумма найденного расхождения превышает заданный внутренний порог: такие случаи не должны ждать еженедельного разбора.
На диаграмме ниже — движение одного резервного фонда за месяц из практики разбора: масштаб такой, что расхождение даже в 3–5% от согласуемых расходов — это уже заметная сумма, которую никто не объяснит постфактум, если не сверять регулярно.
В другом разборе — не связанном с этим фондом — точно так же всплыл необъяснённый рост фонда заработной платы без единого нового найма, в объёме, сопоставимом с месячным резервом на непредвиденные расходы: к нему я вернусь ниже отдельно, чтобы не смешивать два разных кейса в одной сумме.
Экономика: что стоит и что даёт
Внедрение — это часы работы на старте плюс копеечная стоимость инфраструктуры потом. Порядок цифр похож на расчёты из статьи, где я подробно считал, во что реально обходится держать ИИ-обвязку в эксплуатации: сколько на самом деле стоит ИИ в месяц. Только для сверки платежей цифры обычно ниже — задача проще, чем разбор неструктурированных документов.
Формула для прикидки своего случая: (часы в день на ручную сверку) × (часовая ставка сотрудника, который её делает) × (рабочих дней в месяце) = скрытые трудозатраты в месяц. Разовые часы на настройку × ставка разработчика — это стоимость внедрения. Разделите одно на другое — получите срок окупаемости в месяцах.
| Этап | Оценка часов | Комментарий |
|---|---|---|
| Настройка выгрузки из CRM (вебхук/API) | 4–8 ч | зависит от того, есть ли уже интеграция |
| Скрипт сопоставления + хранение истории версий | 6–10 ч | разово, дальше только доработки правил |
| Промпт и тестирование классификации | 2–4 ч | основная работа — подбор пороговых значений |
| Эксплуатация в месяц | — | вызовы дешёвой модели на объёме в сотни строк в день — единицы долларов в месяц (оценка) |
Пример расчёта окупаемости (консервативная оценка): суммарно на настройку уходит 12–22 часа, возьмём верхнюю границу. При типичной ставке разработчика это разовое вложение, которое соотносится с ежемесячной экономией времени сотрудника (расчёт ниже) как примерно 1,5 к 1 — то есть окупаемость около полутора месяцев.
Считаю эффект только от самой сверки, не смешивая с соседними инициативами вроде контроля дебиторки или прослушки звонков. Полная стоимость сотрудника, который вручную ищет расхождения, для компании обычно выше, чем его оклад: базовая ставка плюс налоги и отчисления (около половины ставки сверху) плюс сопутствующие затраты на рабочее место и инструменты — полная стоимость такого специалиста для компании обычно вдвое превышает оклад «на руки» (оценка). Если автоматическая сверка освобождает порядка 30% времени такого сотрудника (оценка, а не измеренный факт) — это заметная доля его месячной стоимости для компании, которую можно перераспределить на работу с дебиторкой или клиентами вместо ручного поиска расхождений в таблицах.
Второй эффект — не количество часов, а скорость обнаружения риска. В одном из разборов при типичных для компании такого масштаба месячных расходах и выручке компания обнаружила дефицит кэша, заметный для месячного бюджета, только по факту — когда денег не хватило даже на зарплаты. Регулярная сверка с ежедневным просмотром метрик не устраняет сам дефицит, но переносит момент его обнаружения на недели раньше, пока ещё есть время договориться о кредитной линии или перенести необязательный платёж — а не решать вопрос за полчаса, потому что подрядчику «нужно прямо сейчас».
На диаграмме — разрыв между плановым лимитом и фактической потребностью из истории с архивным поиском:
Лимит фонда на финансирование этапа работ был установлен на уровне, который оказался на порядок меньше нужного, а реальная потребность на пике оказалась почти в девять раз выше плана. Разрыв не виден ни в CRM, ни в плановом бюджете, если не сверять фактический расход с фактическим объёмом работ помесячно.
Что делать, если расхождения уже накопились
В одном из разборов собственник потребовал к утру следующего дня детализацию всех статей расходов по двум месяцам с объяснением причин изменений — не совместный анализ, а готовую расшифровку. Повод — непонятный и резкий рост фонда заработной платы при том, что новых сотрудников не нанимали. Расхождение такого масштаба обычно означает, что сверка не велась вообще, а не что кто-то один раз ошибся.
Рабочий алгоритм для похожих ситуаций тот же, что использовали при пересчёте лимита на архивный поиск, только применённый к прошлым периодам: выгрузить закрытые документы за базовый период с расчётом себестоимости, выгрузить сделки текущего периода, сравнить помесячный прирост количества и стоимости по направлениям, выявить аномалии по типам операций. Вместо аргумента «нам не хватает, давайте увеличим» — пересчёт в привязке к фактическому росту объёма и выручки.
Прежде чем строить автоматическую сверку, стоит навести порядок с дисциплиной ввода данных в CRM — иначе автоматика упрётся в тот же мусор, о котором шла речь выше. Я разбирал это отдельно в статье менеджеры не вносят данные в CRM: что делать без репрессий, а уже потом можно накладывать сверку поверх.
Чек-лист: с чего начать в понедельник
- Выгрузить сделки за последний месяц из CRM и платежи из банка или кассы в одну таблицу — вручную, без автоматизации, просто чтобы увидеть масштаб расхождения.
- Договориться об одной методологии признания дохода на всю компанию: по факту поступления денег, а не по дате договора.
- Завести отдельный регистр возвратов с полями «удержано», «возвращено», «причина» — и назначить, кто его ведёт.
- Настроить регулярную, хотя бы ежедневную, выгрузку данных из CRM с сохранением истории версий, чтобы ловить сдвиги дат до того, как они превратятся в расхождение по сумме.
- Назначить фиксированное время и владельца еженедельной сверки — не «когда попросят», а по календарю.
- Проверить, что перенесённые или отложенные платежи не «зависают» технически и не требуют забытого вручную повторного запуска.
Частые вопросы
Почему в CRM одна сумма по сделке, а в кассе другая?
Чаще всего это разный момент фиксации: CRM показывает договор, касса — фактическое поступление денег, а между ними могут быть возвраты, комиссии или частичная оплата.
Как проверить, что даты сделок в CRM не съезжают?
Настроить регулярную, например ежечасную, выгрузку данных и сравнение с предыдущей версией — расхождение в датах создания или закрытия сделки сразу видно.
Кто должен фиксировать возвраты клиентам?
Отдельный регистр с полями «удержано» и «возвращено», который сверяется с CRM и банковской выпиской, а не устная договорённость между менеджером и бухгалтерией.
#автоматизация #контроль и надёжность #деньги
Новые разборы — письмом, в день выхода. Без дайджестов ради дайджестов: нет статьи — нет письма.