Scoperly

Одна платформа на весь рабочий день дистрибьютора: продажи, остатки по складам, рейсы доставки, долги и кассы, а для его клиентов — витрина и маркетплейс.

Работает

Что это
Наш собственный продукт, работает
Порталы
Покупатели, поставщики, администрация, партнёры, разработчики
Интерфейс
10 языков
Где работает
Google Cloud
Панель поставщика в Scoperly: выручка, заказы к обработке, просроченные долги и последние заказы демо-компании

Экраны демо-компании. Данные вымышлены.

Задача

Дистрибьютор продаёт магазинам, ресторанам и отделам закупок, и за каждой продажей стоят остатки, доставка, долг или касса. Задача была собрать продажи и всю эту работу в одной системе и дать клиентам одно место, где видно каталог и можно заказать.

Что построили

  • Остатки по складам и машинам

    Остатки на каждом складе и в каждой машине, резерв под заказы, закупки, возвраты и пересчёты. Каждое изменение идёт через один сервис и блокирует строки, поэтому итоги сходятся.

    Экран склада в Scoperly: товары с количеством по складам и стоимость запаса
  • Долги и кассы

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

    Экран долгов в Scoperly: клиенты, кто сколько должен и как давно
  • Рейсы доставки

    Заказы собираются в рейс на одну машину. Лист загрузки складывает всё, что нужно положить в кузов, и печатается одним файлом, со страницей на каждый заказ.

    Рейс доставки в Scoperly: заказы в машине и их суммы
    Напечатанный лист загрузки рейса: товары, количество и места для подписей
  • Отчёты

    Продажи, маржа, удержание клиентов, движение денег и товаров: один раздел и один период на всех.

    Отчёты Scoperly: продажи по клиентам за месяц
  • Connect API

    Публичный API для других систем: каталог, остатки, заказы и вебхуки, контракт OpenAPI и документация для разработчиков.

    Документация Scoperly Connect API для разработчиков

Всё, что он умеет

Каталог и заказы

  • Каталог и витрина.
  • Прайс-листы, группы клиентов и скидки.
  • Заказы.
  • Маркетплейс.

Работа дистрибьютора

  • Продажи и возвраты.
  • Остатки на нескольких складах.
  • Продажи с машины и прямые продажи.
  • Рейсы доставки с листом загрузки.

Деньги и документы

  • Долги клиентов в журнале, где записи только добавляются.
  • Кассы и расходы.
  • Отчёты.
  • Печатные документы (PDF) и выгрузки.

Платформа

  • Порталы для покупателей, поставщиков, администрации, партнёров и разработчиков.
  • Интерфейс на 10 языках.
  • Подписки через merchant of record (Paddle).
  • Connect API с публичной документацией для разработчиков.
  • Встроенный AI-ассистент, который работает с ключом клиента; ключи зашифрованы AES-256-GCM.

Как устроен

Порталы Внешние сервисы Покупатели Поставщики Администрация Партнёры Разработчики API PostgreSQL Redis Объектноехранилище Платежи Почта Защита от ботов Connect API Другие системы Scoperly Studio Порталы Данные Внешние сервисы Покупатели Поставщики Администрация Партнёры Разработчики API PostgreSQL Redis Объектное хранилище Платежи Почта Защита от ботов Connect API Другие системы Scoperly Studio

Части

  • Порталы: Покупатели, Поставщики, Администрация, Партнёры, Разработчики
  • API
  • Данные: PostgreSQL, Redis, Объектное хранилище
  • Внешние сервисы: Платежи, Почта, Защита от ботов
  • Connect API
  • Другие системы
  • Scoperly Studio

Связи

  • Пять порталов работают через API.
  • API хранит данные в PostgreSQL.
  • API использует Redis.
  • API хранит файлы в объектном хранилище.
  • API работает с внешним платёжным сервисом для подписок.
  • API отправляет почту через внешний почтовый сервис.
  • API использует внешний сервис защиты от ботов.
  • Connect API — API платформы для других систем.
  • Другие системы обмениваются данными с платформой через Connect API.
  • Scoperly Studio синхронизируется с платформой через Connect API.
Вне нашего продукта

Инженерные решения

  • Один писатель для остатков

    Все изменения остатков идут через один сервис, а итог всегда равен сумме по складам.

  • Блокировки строк там, где движутся деньги и товар

    Оформление заказа, смена статусов и кредитные балансы берут блокировку строк, поэтому двое не продадут одну и ту же последнюю коробку.

  • Журналы, которые только растут

    Долги и движения по кассам не обновляются и не удаляются. Это отвергает триггер в базе, а исправление — обратная запись.

  • Изоляция компаний

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

  • Keyset-пагинация

    Длинные списки листаются от последней показанной строки, а не по смещению, поэтому остаются быстрыми по мере роста.

  • Зашифрованные AI-ключи клиентов

    Ассистент работает с собственным ключом клиента, который хранится зашифрованным AES-256-GCM.

Технологии

  • Java 21
  • Spring Boot 3
  • PostgreSQL 16
  • Redis
  • React 19
  • TypeScript
  • Docker
  • Google Cloud

PostgreSQL с версионными миграциями. Работает в Google Cloud: виртуальная машина с контейнерами, управляемая база данных, объектное хранилище, балансировщик нагрузки и правила WAF.

По направлениям

  • AI и машинное обучение AI-ассистент, работающий с ключом клиента, встроен в платформу; ключи зашифрованы AES-256-GCM.
  • Веб-платформы Мультиарендная платформа: несколько порталов, интерфейс на 10 языках, подписки.
  • Безопасность Аудит и исправления по нему, ограничение частоты запросов, правила WAF, защита от ботов, изоляция арендаторов.
  • Данные и базы данных Версионные миграции схемы, keyset-пагинация, блокировки строк при работе со складом.
  • DevOps и облако Прод в Google Cloud: виртуальная машина с контейнерами, управляемая база данных, балансировщик; CI/CD.
  • Интеграции и автоматизация Scoperly Connect API с публичной документацией для разработчиков.

Другой продукт

Scoperly Studio

Десктопная учётная система для дистрибьюторов: офисный сервер и десктоп-клиенты для Windows.

Как он устроен : Scoperly Studio

Расскажите о задаче

Хватит нескольких строк. Мы прочитаем их и ответим вопросами.

Обсудить проект