Корпоративный клиент требует индивидуальные цены, права сотрудников разграничены по ролям, а заказы уходят напрямую в 1С — типичный сценарий для B2B-портала. Без автоматизации менеджеры тонут в ручном согласовании, теряются документы, срываются сроки. Мы разрабатываем платформы, которые решают эти задачи комплексно. Средний объём заказов на таких порталах — от 500 тыс. до 5 млн руб. в месяц, а ручной труд сокращается на 80%.
Почему B2B-портал — не просто интернет-магазин?
B2B-портал — закрытая веб-платформа для работы с корпоративными клиентами: оптовые заказы, управление договорами, совместная работа с документами, личные кабинеты юридических лиц. Ключевое отличие от B2C — многоуровневое ценообразование, сложная иерархия пользователей внутри одной компании и интеграция с учётными системами (1С, SAP).
Как устроено разграничение доступа?
В B2B аккаунт принадлежит компании (organization), а не физическому лицу. Внутри компании — несколько пользователей с разными ролями:
Organization: ООО "Технопром"
├── Director (owner) — полный доступ
├── Buyer — заказы, просмотр цен
├── Accountant — счета, акты, финансы
└── Viewer — только просмотр каталога
Приглашение сотрудника: директор вводит email, сотрудник получает invite-ссылку, устанавливает пароль, назначается роль. Реализация: RBAC (Role-Based Access Control) на уровне маршрутов и объектов. Используем RBAC для гибкого управления правами.
Договорное ценообразование
Ключевая функция B2B-портала — индивидуальный прайс-лист. У каждого клиента своя цена на каждую позицию или группу позиций. Структура данных:
-- Прайс-лист привязан к организации
CREATE TABLE price_lists (id, organization_id, name, valid_from, valid_to);
-- Правила: для конкретного товара или категории
CREATE TABLE price_list_rules (
price_list_id, product_id, category_id,
price_type ENUM('fixed', 'discount_percent', 'multiplier'),
value DECIMAL
);
При расчёте цены: сначала ищется правило для конкретного товара, затем для категории, затем применяется базовая цена.
Пример расчёта цены
Если для товара задано правило с типом discount_percent = 15, то цена = базовая цена * 0.85. Если правил нет — берётся базовая цена прайс-листа.
Оптовые заказы и минимальные суммы
B2B-заказы крупнее и сложнее розничных:
- Минимальная сумма заказа (MOQ) — от 50 000 руб.
- Заказ по каталожным единицам с весовыми / упаковочными коэффициентами
- Отложенные заказы (pre-order с датой поставки)
- Быстрое добавление по SKU (bulk add form)
- Шаблоны заказов — сохранить список товаров для повторного заказа
Документооборот
После оформления заказа автоматически генерируются документы:
- Счёт на оплату (PDF) — реквизиты платформы + строки заказа
- УПД/накладная — после отгрузки
- Акт сверки — за период
Генерация PDF: Puppeteer, dompdf (PHP), @react-pdf/renderer (Node.js). Шаблоны документов хранятся в базе, заполняются данными заказа.
Интеграция с 1С
Большинство B2B-клиентов ведут учёт в 1С. Интеграция через REST API (HTTP-сервисы на платформе 1С 8.3+). Двусторонняя синхронизация: остатки и цены из 1С на портал, заказы с портала в 1С.
Периодичность обновления остатков: от realtime (через 1С-оповещения) до раз в час (cron). Для критичных остатков — резервирование при создании заказа через очередь.
Личный кабинет организации
Разделы ЛК:
- Дашборд — оборот за период, статусы заказов, баланс
- Заказы — история, статусы, отслеживание
- Документы — счета, УПД, акты (скачать PDF, запросить оригинал)
- Справочники — адреса доставки, контактные лица
- Пользователи — управление сотрудниками и ролями
- Кредитный лимит — текущий долг, лимит, история транзакций
Как мы разрабатываем B2B-порталы?
- Анализ — изучаем бизнес-процессы, ценообразование и точки интеграции.
- Проектирование — архитектура БД, прототипы интерфейсов, спецификация API.
- Разработка — итеративная реализация модулей (каталог, цены, заказы, документы).
- Интеграция — настройка обмена с 1С, тестирование синхронизации.
- Тестирование — нагрузочное, функциональное, приёмочное.
- Запуск — деплой, обучение администраторов, документация.
Что входит в результат?
- Полностью готовая платформа с индивидуальным дизайном (кастомизация фронтенда)
- Интеграция с 1С по REST API (двусторонняя синхронизация)
- Система ролей и прав (RBAC) с разграничением доступа
- Генерация документов (счета, УПД, акты) в PDF
- Документация по эксплуатации и обучение администраторов
- Гарантия на код и поддержка после запуска
Сроки
| Этап |
Время |
| MVP (каталог + цены + заказы + ЛК + счета) |
3–4 месяца |
| Полная платформа (интеграция 1С, документооборот, аналитика) |
5–8 месяцев |
Сроки зависят от сложности ценообразования и количества интеграций. Получите консультацию — мы оценим ваш проект за один день.
Технический стек
| Слой |
Технологии |
| Backend |
Laravel / Django / Spring Boot |
| Frontend |
React + Next.js / Vue + Nuxt |
| API |
REST + WebSocket для уведомлений |
| БД |
PostgreSQL с row-level security |
| Интеграции |
1С REST API, ERP WebServices |
| Документы |
Puppeteer / dompdf |
На рынке 5+ лет, десятки внедрённых проектов в ритейле и дистрибуции. Гарантируем стабильную работу портала под нагрузкой.
Для сравнения: B2B-портал на готовых CRM-решениях часто даёт сбои при кастомных ценах — наша архитектура справляется в 3 раза быстрее благодаря прямому управлению правилами ценообразования в базе данных.
Получите консультацию по вашему проекту — оценим сложность и сроки за один день.
Разработка корпоративных порталов и внутренних систем
Мы занимаемся разработкой корпоративных порталов — CRM, ERP, LMS и Intranet. Каждый такой проект начинается не с вёрстки лендинга, а с того, как бизнес-правила лягут в архитектуру: кто видит какие данные, как синхронизируются 1С и учётная система, как 500 контактов превращаются в 500 000 без падения производительности. За 7 лет мы реализовали более 40 порталов для компаний с численностью от 50 до 5000 сотрудников. Оценим ваш проект за два рабочих дня — просто свяжитесь с нами.
Публичный сайт можно запустить без детального проектирования — итеративно править по фидбеку. С корпоративным порталом так не работает: стоимость исправления архитектурных решений после запуска на 200 пользователей несопоставимо выше. Поэтому мы уделяем 70% времени аналитике и прототипированию, а код пишем только после согласования ролевой матрицы и интеграционной схемы.
Три зоны, где чаще всего принимаются плохие решения, — модель прав доступа, производительность на больших данных и real-time обновления.
Как построить ролевую модель для 30 отделов?
Модель прав доступа. «Менеджер видит только своих клиентов, руководитель отдела — весь отдел, директор — всю компанию, но финансовые данные — только финансовый директор и выше». Это не три роли — это матрица из ролей, разрешений, организационных единиц и владения записями. Если это реализовать через if ($user->role === 'manager') в контроллерах — через полгода код станет неподдерживаемым.
Правильный подход: Spatie Laravel Permission для базовой ролевой модели + Policy классы для object-level permission (can('view', $deal) проверяет не только роль, но и владение). Для сложных иерархических структур — ABAC (Attribute-Based Access Control) вместо RBAC.
Производительность на больших данных. CRM с 500 000 контактов, фильтрация по 10 полям, сортировка по активности — это задача, где наивная реализация выдаёт 15-секундные запросы. Composite indexes, денормализация агрегатов (last_activity_at на самой записи вместо MAX по связанной таблице), Elasticsearch для full-text поиска по контактам.
Real-time обновления. Несколько сотрудников работают с одним документом или задачей. Без WebSocket — постоянные setInterval с polling каждые 5 секунд, лишняя нагрузка на сервер, задержка обновлений. Laravel Broadcasting + Pusher/Soketi или собственный WebSocket сервер на Node.js — для уведомлений и изменений в реальном времени.
CRM-системы
Типичный набор: контакты, компании, сделки, активности, воронка продаж, отчёты. Технически это несложно. Сложность — в деталях.
Pipeline с кастомными стадиями. Каждая компания хочет свою воронку. Стадии должны быть настраиваемыми без деплоя. Таблица pipeline_stages с position, color, is_final, probability — и drag-and-drop для изменения порядка на UI (React DnD или dnd-kit).
История изменений. Кто и когда изменил статус сделки, поменял ответственного, добавил заметку. Audit log через Observer или spatie/laravel-activitylog. На UI — timeline с фильтрацией по типу активности.
Интеграция с почтой. IMAP/SMTP для подключения корпоративного ящика, автоматическая привязка входящих писем к контактам по email-адресу. Это надёжно работает только при правильной обработке bounce, spam, автоответов — нужна фильтрация.
Почему ERP — не про код, а про данные?
ERP — это когда CRM, склад, производство, бухгалтерия и HR объединены в единую систему. Полный ERP с нуля — редкая задача (обычно интегрируются с существующими системами), но модульные системы под конкретный бизнес — регулярная.
Ключевой принцип: финансовые операции должны быть неизменяемыми. Не UPDATE orders SET status = 'cancelled' — а создание новой записи order_cancellations с ссылкой на исходный заказ. Это принцип immutable ledger, который упрощает аудит и reconciliation.
Интеграция с 1С — почти всегда часть ERP-проекта. Двусторонняя синхронизация: из 1С в портал (справочники, остатки, цены) и из портала в 1С (заказы, документы). RabbitMQ как шина событий между системами надёжнее прямого HTTP-взаимодействия — в случае недоступности 1С сообщения ждут в очереди.
Как устроены LMS: платформы обучения
Learning Management System — это курсы, модули, уроки, тесты, сертификаты, прогресс пользователей.
Видео-контент — самая нагруженная часть LMS. Хранить видео на собственном сервере и отдавать через Nginx — плохая идея: дорого, медленно, нет адаптивного битрейта. Правильно: загрузка в S3/Cloudflare R2, транскодирование через AWS Elemental MediaConvert или Mux, HLS-плейлист для адаптивного стриминга через Video.js или Plyr.
Прогресс просмотра — через периодическую отправку watch_position с фронтенда (каждые 10–30 секунд), хранение в Redis с периодической синхронизацией в PostgreSQL. Не сохранять каждую секунду в БД — это убьёт производительность.
SCORM-совместимость — если нужна интеграция с корпоративными тренинговыми материалами. Отдельный модуль, есть готовые библиотеки (scorm-again).
Intranet и HR-порталы
Корпоративный интранет: новости, документы, оргструктура, HR-процессы (отпуска, заявки, KPI).
Оргструктура в базе данных — это иерархическая структура. Adjacency list (parent_id на каждой записи) прост в реализации, но медленен при рекурсивных запросах. Nested Sets или Closure Table быстрее для чтения иерархии, сложнее при изменениях. В PostgreSQL — рекурсивные CTE (WITH RECURSIVE) с adjacency list — баланс между простотой и производительностью.
Согласование документов и заявок — workflow engine. Простые линейные согласования (сотрудник → менеджер → HR → бухгалтер) можно сделать без специального движка. Нелинейные (параллельные ветки, условные переходы, делегирование) — стоит рассмотреть готовые решения: Temporal.io для workflow orchestration или собственный конечный автомат на базе state-machine паттерна.
Что входит в работу
При заказе разработки корпоративного портала вы получаете:
- Архитектурную документацию (ER-диаграммы, схема интеграций, матрица ролей)
- Полный код в Git-репозитории с CI/CD
- Доступы к инфраструктуре (хостинг, базы данных, хранилища)
- Обучение администраторов и ключевых пользователей (2–3 сессии)
- Гарантийную поддержку на 3 месяца после запуска
Наши принципы проектирования опираются на официальную документацию Laravel по авторизации (Policies) и рекомендации по работе с очередями.
Технический стек для порталов
| Слой |
Инструменты |
| Backend |
Laravel + PostgreSQL |
| Frontend |
React + TypeScript (Inertia.js или отдельный SPA) |
| Real-time |
Laravel Echo + Soketi / Pusher |
| Поиск |
Meilisearch (быстрый старт) или Elasticsearch (объём) |
| Очереди |
Laravel Queue + Redis |
| Файлы |
S3-compatible (MinIO self-hosted или AWS S3) |
| Мониторинг |
Sentry + Telescope (dev) |
Ориентиры по срокам
| Тип портала |
Срок |
| CRM (базовый) |
10–16 недель |
| LMS (курсы + видео + тесты) |
14–22 недели |
| HR-портал (отпуска, KPI, оргструктура) |
12–20 недель |
| Корпоративный ERP (модульный) |
24–52 недели |
Стоимость рассчитывается индивидуально после детальной аналитики требований и ролевой модели. Чтобы получить предварительную оценку, напишите нам — мы проанализируем вашу задачу и предложим оптимальное решение под ключ.