Клиенту требовалась единая веб-система для управления продажами и финансами: связать сделки, товарный каталог, контрагентов, условия оплаты, поступления, платежи, календарь обязательств и коммерческие предложения.
Система должна была работать в двух режимах — как самостоятельное приложение и внутри Bitrix24, — поддерживать точные денежные расчёты, разные роли пользователей, историю изменений и изоляцию данных каждой Организации.
Спроектировал и разработал full-stack-приложение от модели данных и API до интерфейса и развёртывания.
Frontend реализован на React 19, TypeScript, Vite, Tailwind CSS и TanStack Query. Backend — на Node.js, Express, TypeScript, Prisma и PostgreSQL. Настроил авторизацию, роли и права доступа, валидацию данных, журналирование и защитные middleware.
Реализовал управление сделками и их стадиями, каталогом и товарами, контрагентами, шаблонами условий оплаты, курсами валют, финансовыми обязательствами и фактическими транзакциями. Добавил план/факт, просрочки, календарь платежей, историю и восстановление снимков, генерацию коммерческих предложений DOCX по шаблонам.
Для режима Bitrix24 реализовал OAuth, встраивание интерфейса в карточку сделки, синхронизацию компаний и webhook-обработчики. Для автономного режима — Нативные сделки, собственную авторизацию и заполнение реквизитов по ИНН.
Вынес критичные денежные формулы в общий пакет на Decimal.js, добавил схемы Zod и автоматические тесты Vitest. Развёртывание организовано отдельными Docker-стеками с собственной PostgreSQL для каждой Организации.
Получилось рабочее production-приложение, развёрнутое в двух вариантах: интегрированном с Bitrix24 и полностью автономном.
Менеджеры ведут сделку в одном интерфейсе: добавляют товары, рассчитывают стоимость и маржинальность, задают этапы оплат и поставок, фиксируют поступления и платежи, формируют коммерческие предложения и отслеживают календарь обязательств. Руководители получают единый финансовый реестр с планом, фактом и просрочками.
Интеграция убрала двойной ввод данных между CRM и финансовым контуром, а точные расчёты и история изменений сделали результат воспроизводимым и проверяемым. Архитектура с отдельным Инстансом и базой данных для каждой Организации обеспечивает изоляцию данных и позволяет безопасно развивать продукт дальше.