FSM Swarm (Рой)
FSM Swarm — это кроссплатформенная контейнеризированная экосистема автоматизации выездного сервиса полного цикла, оснащенная динамическим решателем транспортных задач с временными окнами (VRPTW).
🎯 Назначение и функциональные возможности
Система автоматизирует операционную логистику диспетчерских служб и работу мобильных инженеров на основе парадигмы «динамического расписания»:
- Автоматическое планирование: Математический расчет оптимальных маршрутов и графиков для всей сетки сотрудников на основе входящего пула заявок.
- Реактивность в реальном времени: Мгновенный адаптивный пересчет текущих планов при возникновении триггеров: отмена или перенос встреч клиентами, появление экстренных (SOS) аварийных заявок, задержки инженеров в пути.
-
Многокритериальная фильтрация: Решатель сопоставляет параметры заявок со свойствами инженеров по жестким критериям:
- Временные окна: Соблюдение SLA и интервалов доступности клиентов.
- Матрица компетенций: Соответствие навыков, допусков и наличия инструментов у сотрудника профилю задачи.
- Ресурсные ограничения: Учет типа транспорта (пеший, общественный, автомобиль или велосипед).
🛠 ️ Технологический стек
- Frontend: React 19, TypeScript, Tauri (десктопная платформа), Vite 8, TailwindCSS v4, React Router v7.
-
Дизайн-система & UI: Собственная UI-библиотека (
@beeline/ui), интерактивные гиды (@beeline/onboardingна базе Driver.js) и утилиты общего назначения (@beeline/shared). - Картография & Визуализация: Leaflet, React Leaflet, Leaflet.heat (тепловые карты плотности заявок), Mermaid (диаграммы архитектуры), KaTeX (математические формулы), React Markdown.
- State Management: Zustand, TanStack React Query v5.
- Работа с формами & Валидация: React Hook Form, Zod.
-
Backend: HonoJS (Node server шлюз), Better-Auth (включая работу по API-ключам), Pino (логирование с pino-pretty),
@hono/zod-openapi, Scalar (генерация интерактивной документации API). -
База данных & ORM: PostgreSQL 17 + PostGIS 3.5 (географическое расширение), Drizzle ORM (релиз-кандидат v1.0), Drizzle Kit (управление схемой и генерация миграций), драйвер
pg(node-postgres). -
Брокер сообщений: PostgreSQL 17 (высокопроизводительная асинхронная очередь задач на базе транзакций через драйвер
asyncpgбез использования внешних брокеров вроде Redis). -
Микросервис оптимизации (Solver): Python >=3.12 (под управлением менеджера пакетов
uv), Google OR-Tools (VRPTW-решатель), SQLAlchemy Asyncio v2, драйверыasyncpgиpsycopg3, валидация данныхPydantic v2, асинхронный HTTP-клиентhttpx. -
Интеграции & Инфраструктура:
- Docker Compose (оркестрация контейнеров со сложными межсервисными
healthcheck-зависимостями). - Valhalla (локальный независимый гео-движок маршрутизации на основе карт OpenStreetMap).
- Подключение к внутренним системам Мос.Хаб (GitLab) и внешним источникам гео-данных.
- Docker Compose (оркестрация контейнеров со сложными межсервисными
-
Тестирование, Менеджмент & Разработка:
- pnpm (управление монорепозиторием, workspaces, переопределение зависимостей).
- Ruff (молниеносный линтинг и форматирование Python-кода).
- Playwright (E2E-тестирование), Vitest (компонентное и юнит-тестирование).
- Tsx / Tsc-alias (сборка и быстрый запуск TS скриптов/миграций на лету).
- Falso (генерация реалистичных сид-данных для ручного тестирования и ETL).
📦 Структура монорепозитория
swarm/
├── apps/ # Исполняемые приложения экосистемы
│ ├── admin/ # Высокопроизводительный UI диспетчера (React 19 + Vite 8 + Tauri)
│ └── api/ # Бэкенд-шлюз (Gateway) на HonoJS с автогенерацией OpenAPI
├── packages/ # Внутренние воркспейсы (pnpm workspaces)
│ ├── api-client/ # Сквозной типобезопасный API-клиент (Hono RPC SDK)
│ ├── db/ # Слой данных: схемы Drizzle ORM, миграции и сиды
│ ├── ui/ # Общая дизайн-система компонентов на React 19
│ ├── onboarding/ # Интерактивные гиды на базе Driver.js
│ └── shared/ # Общие TypeScript-типы и утилиты
├── solver/ # Микросервис асинхронного VRPTW-оптимизатора (Python 3.12 + uv)
├── data/ # Бинарные файлы и медиа-ресурсы (в т.ч. презентации)
├── docs/ # Дополнительная проектная и экспертная документация
├── nginx/ # Конфигурация Nginx для развертывания веб-интерфейса
├── valhalla_tiles/ # Локальные дорожные тайлы карт ЦФО для Valhalla Engine
├── eda/ & .claude/ & .husky/ # Служебные директории окружения, линтеров и агентов разработки
├── docker-compose.yml # Оркестрация локального стенда (PostgreSQL 17, Valhalla, API, Solver)
├── dump.sql # Базовый SQL-дамп структуры и начальных данных БД
├── pnpm-workspace.yaml # Конфигурация воркспейсов монорепозитория
├── .env / .env.docker # Конфигурационные файлы переменных окружения
│
├── ALGORITHM.md # Математическое описание и логика VRPTW-решателя
├── DATASET.md # Спецификация используемых датасетов и графов дорог
├── SOLUTION_DIAGRAM.md # Архитектурные диаграммы взаимодействия компонентов
├── FUTURE.md # Дорожная карта развития и план масштабирования
└── CLAUDE.md # Инструкции и контекст для AI-ассистентов разработки
🚀 Быстрый старт (Локальное развертывание)
Для запуска полного стенда на локальной машине необходимы Docker (с поддержкой Docker Compose) и менеджер пакетов pnpm.
1. Подготовка окружения
Склонируйте репозиторий и создайте файлы конфигурации из шаблонов:
git clone https://hub.mos.ru/rus_kadr03/swarm
cd swarm
Примечание: Перед стартом убедитесь, что файлы дорожных графов для региона (ЦФО) размещены в папке ./valhalla_tiles.
2. Запуск контейнеров
Запустите сборку и развертывание всех сервисов в фоновом режиме. Архитектура настроена таким образом, что веб-сервисы и решатель дождутся полной готовности и прохождения healthcheck-проверок со стороны PostgreSQL и Valhalla:
docker compose up -d --build
После успешного выполнения команды сервисы будут доступны по следующим адресам:
-
Административная панель (Диспетчер):
http://localhost:9999 -
Бэкенд-шлюз (API Gateway):
http://localhost:3030 -
Документация API (Scalar):
http://localhost:3030/reference(генерируется автоматически)
3. Базовые команды управления
# Остановить все сервисы (данные сохраняются в локальной директории ./pgdata)
docker compose down
# Запустить только инфраструктурную часть (для локальной разработки на хосте)
docker compose up -d db valhalla
📖 Сопутствующая документация
Для глубокого изучения архитектуры, математического аппарата и структуры данных проекта используйте специализированные руководства в корне репозитория:
| Документ | Содержание |
|---|---|
SOLUTION_DIAGRAM.md
|
Схема решения: Интерактивные диаграммы взаимодействия компонентов, потоки данных между интерфейсом диспетчера, Hono-шлюзом и решателем. |
🧮 ALGORITHM.md
|
Спецификация математической модели: Подробное описание логики оптимизации, штрафных функций и системы ограничений динамического VRPTW. |
DATASET.md
|
Описание датасета: Спецификация тестового набора данных, форматы полей, единицы измерения, гео-координаты и использованные справочники. |
FUTURE.md
|
Планы развития: Дорожная карта масштабирования экосистемы, идеи по оптимизации алгоритмов и внедрению предиктивной аналитики. |
CLAUDE.md
|
Контекст разработки: Инструкции, код-стайл проекта и соглашения по архитектуре для AI-ассистентов. |
🔗 Развернутые стенды и демонстрационные материалы
Вы можете протестировать работу экосистемы и ознакомиться с материалами проекта по следующим ссылкам:
-
🖥 ️ Демо-интерфейс диспетчера (Клиент) — интерактивное веб-приложение для управления выездными службами, мониторинга инженеров и визуализации маршрутов. -
⚙ ️ Интерактивная документация API (Сервер) — Scalar-спецификация эндпоинтов бэкенд-шлюза со строгой Zod-валидацией контрактов. -
🎓 Техническая документация проекта — подробное PDF-руководство по архитектурным решениям. -
📊 Презентация продукта — презентационные материалы экосистемы FSM Swarm. -
🎨 Скринкаст — демонстрация работы FSM Swarm.