Модульная CRM/ERP-платформа: спроектирована и сделана мной с ИИ-агентами

Модульная CRM/ERP на замену коробочному порталу у дистрибьютора медтехники. Анализ, архитектура, реализация и доводка — мои; основной код писали ИИ-агенты под моим контролем. Развёрнута на сервере заказчика пилотом.

45Django-приложений в модульном монолите
5.5 wk359 коммитов, один автор
72файла тестов; API 1С и мобилки покрыты

Собственная CRM/ERP, задуманная как замена разросшейся коробки: идёт пилот

Было
Продажи, склад, сервис и документы жили в портале с разросшимся набором надстроек; любые изменения требовали правок в этом наборе.
Сделал
Сам провёл анализ, спроектировал и построил модульную систему — клиенты и сделки, договоры, склад, закупки, доставка, почта, чат; код писали ИИ-агенты под моим контролем.
Стало
За 5,5 недели разработки собрано ядро системы и развёрнут пилот; он идёт в отдельном направлении компании — продаже металлообрабатывающих станков (3 пользователя).

Контекст и масштаб

Июнь–август 2026. Около 140 тыс. строк Python, ~220 моделей данных, ~110 API-представлений, 26 фоновых задач; мобильный клиент на Flutter, десктоп на Electron, расширение для 1С. Пилот на сервере заказчика с августа: 3 пользователя, импортирована клиентская база (~150 компаний), рабочих сделок единицы.

Задача

Продажи, склад, сервис и документы были разнесены по доработанному Bitrix24, ~30 приложениям портала и отдельным сервисам; обмен с 1С встал (см. кейс Bitrix24). Компания зависела от кода, которым не управляла.

Анализ и альтернативы

Варианты: дальше дорабатывать Bitrix24 (закрытый коннектор 1С, модули подрядчиков, растущая нагрузка процессов), купить другую коробку (та же проблема интеграции) или построить свою платформу с путём миграции из Bitrix24. Выбрано: строить — и параллельно стабилизировать Bitrix24, чтобы бизнес не вставал.

Архитектура

Люди

Продажи, склад, сервис
Выездные инженеры (мобилка)

Система

Веб-приложениеDjango · HTMX · REST · WebSocket
Фоновые воркерыCelery · beat
База данныхPostgreSQL 16
Брокер и каналыRedis 7
Сервер документовOnlyOffice
Мобильный и десктоп-клиентыFlutter · Electron

Внешние системы

1С (учёт)
Bitrix24 (источник миграции)
Операторы ЭДО
LLM API
Почта, push

Основные потоки данных

  1. Доменные события пишутся в outbox в той же транзакции; 1С забирает их по REST и подтверждает каждое.
  2. Данные Bitrix24 импортируются один раз по REST или напрямую из его БД, идемпотентно через карту идентификаторов.
  3. Правила процессов и оркестратор «Секретарь» превращают доменные события в задачи ролей.
  4. Мобильные клиенты входят через собственный OIDC-провайдер платформы (PKCE) и синхронизируют офлайн-изменения.

Ключевые решения и компромиссы

  1. Модульный монолит, а не микросервисы. Один автор, одна граница транзакций, одна выкладка. 45 приложений с явными границами оставляют возможность разделить позже.
  2. Transactional outbox для 1С. 1С сама забирает и подтверждает события, портал никогда не шлёт вслепую. Цена — нужно своё расширение на стороне 1С.
  3. Процессы как данные. Движок процессов с триггерами и роботами: изменение процесса не требует релиза.
  4. ИИ-помощник за судьёй (в работе). Рубрика, проверка фактов и сухой прогон перед любой записью; права проверяет ядро, а не модель.

Что сделано

  • Ядро CRM: компании, контакты, лиды, сделки, канбан, роли и оргструктура, мультиорганизация, история изменений.
  • Договоры, задачи, календарь; склад с серийниками и партиями, закупки, приёмка, отгрузка, маршруты доставки, производство.
  • Почта, чат на WebSocket, уведомления, BI-дашборды, печатные формы docx, импорт.
  • Папка .ai/ с правилами, дорожной картой, handoff и спецификациями держала ИИ-агентов последовательными на 359 коммитах.

Результат

Работающий пилот: развёрнут со всеми миграциями, в ежедневную работу ещё не введён; следующий шаг — перенести из Bitrix24 первый живой процесс.

Что сделал бы иначе

Я бы до наращивания ширины согласовал с пользователями рамки пилота и первый живой процесс: 45 приложений за 5,5 недели с агентами сделать несложно, медленная часть — внедрение.