Cloud ERP для ресторанов и retail

Invelio

Мультитенантная облачная ERP-платформа для управления ресторанным и розничным бизнесом

Современная архитектура, DDD подход, полный цикл управления: от закупок до лояльности

О платформе

Invelio — мультитенантная облачная ERP-система нового поколения для управления ресторанным и розничным бизнесом. Платформа построена на принципах Domain-Driven Design (DDD) и обеспечивает полный цикл операционного управления: от каталогизации продукции и управления запасами до POS-терминалов, программ лояльности и аналитики.

0
Доменных пакетов
0+
Модулей системы
0
Клиентских приложений
0+
API эндпоинтов
0
Async-сообщений
0
Языка + любой
0
Технологий в стеке
0
Уровень PHPStan

Мультитенантность

Единая кодовая база с изоляцией данных на уровне tenant_id. Разрешение арендатора по субдомену (X-Tenant-Slug) через TenantResolverSubscriber.

API-First подход

OpenAPI-спецификации для каждого модуля. Автогенерация TypeScript-типов. Три API-клиента (tenant, admin, superadmin).

Асинхронная архитектура

RabbitMQ + Symfony Messenger. 27 async-сообщений в 10 пакетах. Аудит в MongoDB. QueueStatsMiddleware.

Безопасность

Stateless JWT с access/refresh. Ролевая иерархия: SUPER_ADMIN → OWNER → ADMIN → MANAGER → USER. 2FA (OTPHP). Cloudflare ACM + Total TLS.

Enterprise Ready

UUID v7 ключи, bcmath для денег, PHPStan level 8, Soft-delete, PSR-6 кэш, автоматический бэкап через pg_dump + S3.

Для инженеров

PHP 8.4 / Symfony 8, Doctrine 3, PostgreSQL 16 (UUID v7, bcmath). Мультитенантность на уровне приложения (TenantAwareTrait), резолвинг арендатора по X-Tenant-Slug. Async — RabbitMQ + Symfony Messenger, аудит в MongoDB. PHPStan level 8.

PHP 8.4 / Symfony 8PostgreSQL 16TenantAwareTraitRabbitMQMongoDB auditPHPStan 8

Ключевые возможности

Современный технологический стек и архитектурные решения для масштабируемого ERP-решения

Архитектура

Multi-Tenancy

Единая кодовая база с изоляцией данных на уровне tenant_id.

Безопасность

JWT Аутентификация

Stateless JWT с access/refresh. Роли: SUPER_ADMIN → OWNER → ADMIN → MANAGER → USER.

Архитектура

Асинхронные события

Symfony Messenger + RabbitMQ. 27 async-сообщений в 10 пакетах. Аудит в MongoDB.

Архитектура

DDD Архитектура

26 доменных пакетов. Интерфейсы сервисов, DTO, Repository паттерн.

Функциональность

Мобильные приложения

Flutter: white-label приложение лояльности и приложение курьера. Riverpod, go_router.

Разработка

OpenAPI First

Спецификации для каждого модуля. Автогенерация TypeScript-типов.

Инфраструктура

PostgreSQL + MongoDB

PostgreSQL 16 с UUID v7. MongoDB 7 для асинхронного аудита.

Безопасность

2FA / OTP

Двухфакторная аутентификация через OTPHP. Валидация номеров.

Разработка

PHP 8.4 + Symfony 8

Строгая типизация, атрибуты. PHPStan level 8.

Инфраструктура

Cloud Native

Docker Compose с 10 сервисами. GitHub Actions CI/CD.

Фронтенд

React 18 + TypeScript

Vite, Tailwind CSS, Radix UI, TanStack Query, Zustand.

Архитектура

CQRS через Messenger

Разделение команд и запросов через Symfony Messenger.

Инфраструктура

S3 Хранилище (MinIO)

Flysystem для единого S3-интерфейса.

Функциональность

Управление клиентами

Профили, сегментация, мультивалютные кошельки лояльности.

Функциональность

POS-терминал

Заказы, платежи, смены. Интеграция с фискальными регистраторами.

Функциональность

Аналитика и отчёты

Дашборды с Recharts/ApexCharts. Экспорт PDF через Dompdf.

Функциональность

QR-меню

Цифровые меню с промо. Rate-limited public API.

Функциональность

Печать (Fulfillment)

Печать чеков и этикеток. Станции фулфилмента.

Интеграции

Telegram Bot

Кастомный бот для уведомлений и управления.

Инфраструктура

Elasticsearch

Полнотекстовый поиск по товарам, заказам, клиентам.

Интеграции

Импорт данных (Exchange)

Движок импорта: iiko, Excel, CSV. Парсер + applier для миграции данных.

Функциональность

SLA & Эскалации

Трекер задач с SLA. Система эскалации.

Функциональность

Мультиязычность

react-i18next + Symfony Translator. Из коробки az, ru, en — локализация на любой язык.

Для инженеров

DDD-пакеты в packages/ с контролем слоёв (deptrac). UUID v7, bcmath для денег, soft-delete, DTO-граница, интерфейс у каждого сервиса. OpenAPI-спецификации → генерация TypeScript-типов.

DDD packagesdeptracUUID v7bcmathOpenAPIDTO boundary
Системы и приложения

QR-меню

Гость сканирует QR-код на столе и заказывает прямо с телефона — без установки приложения.

QR-меню
Бургеры Напитки Десерты
InvelioAI
  • Сканирование QR-кода на столе — и меню открывается в браузере, без приложения
  • AI-чат отвечает на вопросы по блюдам, составу и аллергенам прямо в меню
  • Меню подстраивается под стол, время суток и самого гостя
Без установки AI-чат Умное меню

SmartQR Context

Содержимое меню меняется в зависимости от контекста: конкретный стол, время суток, местоположение и аккаунт гостя — каждый видит своё релевантное меню.

InvelioAI Chat

AI-чат с доступом к базе данных заведения: отвечает гостю на вопросы по меню, составу, аллергенам и самому заведению прямо внутри QR-меню.

Шаблоны + AI-редактор

Встроенные и полностью кастомные шаблоны оформления меню. Редактирование внешнего вида с помощью AI — опишите желаемое, и меню перестроится.

Каталог и категории

Блюда, модификаторы, стоп-лист

Корзина и заказ

Оформление, статус заказа

Промо и отзывы

Акции, рейтинги блюд

Публичный API

Rate-limit, кэш, без авторизации

React 18 + Vite SmartQR Context InvelioAI AI-шаблоны menu.{tenant}
Для инженеров

Гостевое SPA (React 18 + Vite) поверх модуля Menu. Публичный API без авторизации с rate-limit и Redis-кэшем. SmartQR резолвит контент по столу, времени, локации и аккаунту; InvelioAI — RAG над каталогом через модуль AI (мультипровайдерный LLM).

packages/menuGET /api/v1/publicRedis cacherate-limitReact 18 + Vitemenu.{tenant}

POS-терминал

Касса прямо в браузере — принимает заказы и оплаты и работает даже без интернета.

  • Касса открывается в браузере — ничего не нужно устанавливать
  • Продолжает работать без интернета и синхронизируется, когда связь вернётся
  • Один POS для retail, кофейни и ресторана — со сканером, меню и планом зала
Без установки Работает оффлайн Любой формат
Оплата

Заказы

В зале / навынос / доставка

Платежи

Наличные, карта, QR, split

Смены и касса

Сверка, Z-отчёты, PIN кассира

План зала

Дизайнер зон, столы, элементы

Работает везде

Онлайн POS

Работает прямо в браузере — без установки. Открыл вкладку и начал продавать. Мгновенные обновления для всех точек.

Оффлайн POS

Десктоп-приложение для Linux, macOS и Windows. Продолжает работать без интернета и синхронизируется после восстановления связи.

Мобильный POS

Онлайн-касса в кармане официанта или курьера. Приём заказов и оплат прямо со смартфона — у стола или на выезде.

Браузер (онлайн) Desktop · Linux / macOS / Windows Оффлайн-режим Мобильный Fulfillment / Print stations
Для инженеров

packages/pos на Symfony/Doctrine: конечный автомат заказа DRAFT→…→COMPLETED, split-платежи, смены и кассы, FloorPlan/Zone/FloorElement, PIN-аутентификация кассира. Онлайн — React SPA; оффлайн — десктоп-приложение с локальным хранилищем и синхронизацией после восстановления связи.

packages/posOrder state machinesplit paymentsFloorPlan/ZonePOST /api/v1/posoffline sync

Kiosk App

Сенсорный киоск, на котором гость сам собирает заказ, оплачивает и получает номер.

  • Гость сам собирает заказ на сенсорном экране
  • Оплачивает прямо на месте и получает номер
  • Заказ сразу уходит на кухню
Самообслуживание Оплата на месте В зале и навынос

Самостоятельный заказ

Блюда, модификаторы, комбо

В зале / навынос

Выбор способа получения

Оплата на месте

Карта, QR — и номер заказа

Прямо на кухню

Заказ уходит на KDS

Self-hosted Полноэкранный kiosk-режим Брендированная витрина kiosk.{tenant}
Kiosk AppФото скоро
Самообслуживание
Бургеры Комбо Напитки
+
+
Оформить заказ · 3
Для инженеров

Клиент-витрина в полноэкранном kiosk-режиме, разворачивается self-hosted в зале. Меню и заказы — через API (модули Menu и POS), позиции уходят на кухню через Realtime (Mercure SSE). Поддомен kiosk.{tenant}.

kiosk.{tenant}Menu / POS APIMercure SSE → KDSself-hostedkiosk-режим

Система доставки

Заказы на доставку приходят в систему, курьер получает адрес, а статус виден в реальном времени.

  • Заказы на доставку принимаются прямо в системе
  • На каждый заказ назначается курьер с адресом клиента
  • Статус заказа видно в реальном времени — от приёма до вручения
Приём заказов Назначение курьеру Трекинг в реальном времени
Тип заказа «Доставка», расчёт стоимости, правила бесплатной доставки
Гео-адреса клиентов: район, подъезд, координаты
Идентификация курьера по OTP, назначение заказов
Диспетчерская доска и трекинг курьеров в реальном времени
Модуль Courier Статусы заказа Realtime · Mercure SSE
Система доставкиФото скоро
#1042
В пути
#1041
Доставлен
#1043
Ожидает курьера
Для инженеров

Тип заказа DELIVERY, вклад в тоталы через DeliveryContributor / FreeDeliveryContributor. Гео-адреса в модуле Customer (район, подъезд, координаты). Идентификация курьера — модуль Courier (ROLE_COURIER, OTP). Статусы транслируются через Realtime (Mercure SSE).

DeliveryContributorpackages/courierROLE_COURIERMercure SSECustomerAddress
Мобильное приложение
1 250 ★
Награды
Купоны
Игры

Мобильное приложение

Приложение ресторана в телефоне гостя — со своим меню, бонусами и акциями.

  • Смотрите меню, копите бонусы и получаете скидки прямо со смартфона
  • Карта лояльности всегда с собой, а история покупок и купоны — под рукой
  • Акции, истории и уведомления держат гостя в курсе новинок заведения
Бонусы и скидки Своё меню Уведомления

Карта лояльности

QR, бонусы, кошелёк, уровни

Меню и каталог

Категории, блюда, филиалы

Геймификация

Колесо фортуны, штампы, стрики

Купоны и Stories

Промо, истории, уведомления

Flutter 3.27 Riverpod go_router Локализация на любой язык
Для инженеров

Flutter 3.27 / Dart. Riverpod + go_router + freezed, easy_localization (az/ru/en). White-label через build-flavors и assets/config/<tenant>.json (тема, бренд, данные). Источник данных — API Customer и публичный Menu.

Flutter 3.27Riverpodgo_routerfreezedbuild flavorsCustomer API

Приложение курьера

Приложение для курьера: видит назначенные заказы, ведёт доставку и отмечает выполнение.

  • Курьер видит свои назначенные заказы — что забрать и куда доставить
  • Строит маршрут до клиента и ведёт доставку шаг за шагом
  • Отмечает выполненную доставку и видит свой заработок
Мои заказы Маршрут Заработок

Поток доставки

Забор Доставка PIN клиента Сверка наличных

Входящий заказ

Таймер, авто-отклонение 15с

Заработок

Графики по периодам, архив

Flutter 3.27 Riverpod fl_chart unit-тесты автомата
Приложение курьера
Онлайн

Новый заказ · 00:12

Заказ · #1042
Отклонить
Принять
Для инженеров

Flutter (Riverpod, go_router, fl_chart). Чистый конечный автомат доставки: pickup → delivered → PIN клиента → сверка наличных, покрыт unit-тестами. Обновления в реальном времени через REST + Mercure SSE.

Flutterfl_chartstate machineunit testsMercure SSE
Приложение официанта
Терминал 03 · Зал А Гость найден
АВ

Алина Воронцова

Gold · 37 визитов

2 450

баллов

5

уровень

↑ 550

до уровня

Любимые блюда

Цезарь с курицей Раф лавандовый Рибай

Аллергия на арахис · предпочитает столик у окна

Купон: десерт в подарок к дню рождения

Применить купон

Приложение официанта

Официант принимает заказ прямо у стола и сразу узнаёт гостя — с телефона в руке.

  • Официант принимает заказ прямо за столом и отправляет его на кухню
  • По карте гостя приложение показывает его имя, любимые блюда и пожелания
  • Официант следит за статусом блюд и закрывает счёт с оплатой
Заказ у стола Узнаёт гостя Счёт и оплата

Приём заказа

Заказ за столом, отправка на кухню (KDS)

Скан гостя

По коду лояльности из приложения или карты

Профиль и история

Уровень, баллы, визиты, сумма заказов

Предпочтения и заметки

Любимые блюда, аллергии, пожелания

Купоны, бонусы, скидки

Подарки, поздравления, действия к счёту

Счёт и оплата

Пречек, разделение счёта, оплата

Flutter Приём заказа Код лояльности Программа лояльности waiter.{tenant}
Для инженеров

Flutter-терминал. Скан кода лояльности → профиль гостя через CustomerLoyaltyController (модуль Customer). Приём заказа → POS API /api/v1/pos, отправка на кухню через Realtime/KDS. Купоны и скидки — модули Customer и Pricing.

FlutterCustomerLoyaltyController/api/v1/posMercure SSEwaiter.{tenant}
Кухня (KDS)Фото скоро
kds.{tenant}
#1042 02:15
#1043 05:40
#1044 08:30

Кухонный экран (KDS)

Экран на кухне вместо бумажных чеков — заказы приходят к повару мгновенно.

  • Новые заказы сразу появляются на кухонном экране
  • Повар видит очередь и на каком этапе каждое блюдо
  • Готовое блюдо отмечается одним касанием
Экран на кухне Очередь заказов Без бумажных чеков

Очередь-канбан

Группировка по станциям кухни

Таймеры

Цветовая индикация ожидания

Отметка готовности

Тап по позиции, звук-алерт

Wall-mount

Полноэкранный настенный режим

Realtime / Mercure SSE Fulfillment stations kds.{tenant}
Для инженеров

Модуль Realtime (Mercure SSE / WebSocket) транслирует статусы заказов и кухонных станций. Маршрутизация позиций — Fulfillment stations. Клиент — веб на поддомене kds.{tenant} с потоковым обновлением.

packages/realtimeMercure SSEFulfillment stationskds.{tenant}

Digital Signage

Экраны с меню и рекламой прямо в зале заведения.

  • Экраны с меню и рекламные табло прямо в зале заведения
  • Что показывать на экранах — меняется само по расписанию
  • Все экраны управляются из одной панели
Экраны в зале Смена по расписанию Одна панель

Меню-борды

Цены и позиции из каталога

Промо-экраны

Акции, баннеры, расписание

Управление контентом

Плейлисты, привязка к экранам

Авто-синхронизация

Стоп-лист и цены в реальном времени

Меню из каталога signage.{tenant}
Digital SignageФото скоро

Концепт меню-борда

Для инженеров

Контент собирается из каталога и меню; цены и стоп-лист синхронизируются в реальном времени через модуль Realtime. Экраны привязаны к поддомену signage.{tenant}.

catalog / menuMercure SSEsignage.{tenant}
CustomWorkflowФото скоро
CustomWorkflow · редактор
Событие

Заказ создан

Условие

Тип заказа = доставка

Действие

Отправить в Telegram

Палитра

Оплата прошла Низкий остаток Смена закрыта Email Webhook HTTP Свой скрипт
No-code автоматизация

CustomWorkflow

Настраивайте автоматические сценарии для своего бизнеса — без программистов и без кода.

  • Система сама выполняет нужные действия, когда что-то происходит — вам не нужно делать это вручную.
  • Например: пришёл заказ — и вам сразу приходит сообщение в Telegram.
  • Сценарии собираются мышкой в наглядном редакторе, как из кубиков.
Без кода Автоматизация Под свой бизнес

Пример

Пришёл заказ Сообщение в Telegram

Триггеры на события

Заказ, оплата, остаток, смена…

Действия

Telegram, email, webhook, скрипт

Визуальный редактор

Сценарии без кода, drag-and-drop

Изоляция по тенанту

Свои сценарии у каждого бизнеса

No-code Event-driven Per-tenant Свои скрипты
Для инженеров

Триггеры подключаются к 27 async-сообщениям системы (RabbitMQ + Symfony Messenger). Действия: Telegram (модуль Notifications), email, webhook, HTTP, пользовательский скрипт. Сценарии изолированы по tenant_id.

RabbitMQSymfony Messenger27 async-событийNotificationsper-tenant

Модули системы

26 доменных пакетов с Doctrine ORM, разделённых по функциональным областям

Пакет Описание
CoreМультитенантность, общие трейты, feature-флаги, настройки
AuthJWT, TenantMembership, роли на тенант
TenantЖизненный цикл тенантов, планы, DNS-провижининг
SuperAdminПлатформенное администрирование, RBAC, аудит
ReferenceГлобальные и тенант-справочники (валюты, налоги, UoM)
StorageS3-хранилище (MinIO) через Flysystem
CatalogТовары, категории, бренды, атрибуты, штрихкоды
InventoryСклад: остатки, партии (FIFO/FEFO), BOM, перемещения
PricingДинамическое ценообразование, прайс-листы, налоги
KitchenМодификаторы, комбо, тех-карты, стоп-лист, food cost
POSЗаказы, оплаты, смены, кассы, план зала
CustomerCRM, сегменты, адреса, кошельки лояльности
MenuПубличное QR-меню, промо, отзывы
PurchasingПоставщики, заказы закупки, приёмка на склад
BillingИнвойсы, шаблоны документов (Twig→PDF), e-invoicing
FiscalФискализация чеков, Z-отчёты, провайдеры (AZ, TR)
PrintingСтанции печати: чеки, кухонные тикеты, пре-биллы
NotificationsМультиканальные уведомления: inbox, email, Telegram
CredentialЗашифрованный реестр секретов интеграций
AIМультипровайдерная интеграция LLM, конфиг моделей
TaskВнутренний трекер: баги, тикеты, SLA-автоматизация
BackupДампы PostgreSQL по требованию, async через Messenger
ReportingОтчёты, снапшоты, экспорт (CSV/XLSX/PDF)
CourierАутентификация и сессии курьеров (OTP по телефону)
ExchangeДвижок импорта данных (iiko, Excel, CSV)
RealtimeMercure SSE / WebSocket: статусы заказов, KDS, POS-sync
Для инженеров

Слоистость пакетов — строгий DAG, проверяется deptrac (baseline для исключения menu ⇄ pos). Стандартная entity: TenantAwareTrait + TimestampableTrait + SoftDeletableTrait, ключи UUID v7.

deptrac DAGTenantAwareTraitTimestampableTraitSoftDeletableTraitUUID v7

Мониторинг и поддержка

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

Автоматический бэкап

Ежедневные резервные копии базы данных в S3-хранилище. Быстрое восстановление на любую точку.

Логи и аудит

Полная история действий пользователей и системных событий. Неизменяемый аудит-журнал.

Мониторинг 24/7

Метрики, аптайм и очереди под постоянным наблюдением. Алерты об инцидентах в реальном времени.

Поддержка

Реакция на инциденты, помощь в настройке и обновления. Каналы связи с командой.

Ежедневно
Резервные копии
24/7
Мониторинг
100%
Аудит действий
Алерты
Реакция на инциденты
Для инженеров

Бэкап — модуль Backup: pg_dump по расписанию → S3 (MinIO), async через Symfony Messenger. Аудит — асинхронно в MongoDB. Метрики — Prometheus + Grafana (аптайм, p95, очереди); QueueStatsMiddleware отслеживает RabbitMQ. Логи структурированные.

packages/backuppg_dump → S3MongoDB auditPrometheus / GrafanaQueueStatsMiddleware

Архитектура

Монолитная кодовая база с доменной архитектурой и CQRS подходом

Backend (Monolith First)

Symfony 8 фреймворк

Единый монолит с доменным разделением в 26 пакетах

API Layer

REST API с OpenAPI-спецификациями для каждого модуля

Domain Layer

DDD: Интерфейсы сервисов, DTO, Enum, Repository, Doctrine ORM

Infrastructure Layer

PostgreSQL, MongoDB, RabbitMQ, Redis, Elasticsearch, MinIO

Async Layer

Symfony Messenger + RabbitMQ (27 async-сообщений)

Frontend (Multi-App)

Manager App

Управление заведением: каталог, склад, цены, POS, кухня, меню.

Admin Panel

Суперадмин: тенанты, планы, RBAC, справочники, мониторинг.

QR Menu / POS-терминал

Публичное гостевое меню и сенсорный кассовый терминал.

Мобильные (Flutter)

Приложение лояльности + приложение курьера. Riverpod, go_router.

Shared Packages

@snap/api-client, @snap/ui, @snap/shared · типы из OpenAPI

CQRS: Разделение команд и запросов

Команды (Commands)

  • • CreateProductCommand → через Messenger → Обработчик
  • • PlaceOrderCommand → Валидация + Бизнес-логика
  • • CreateRefundCommand → Обработка возвратов

Запросы (Queries)

  • • GetProductListQuery → Прямой репозиторий
  • • SearchOrdersQuery → Elasticsearch
  • • GetDashboardQuery → Кэшированный результат

Технологический стек

Современный стек технологий для enterprise-решения

Backend

  • PHP 8.4Symfony 8, PHPStan 8
  • Doctrine 3ORM, атрибуты
  • PostgreSQL 16UUID v7, bcmath
  • MongoDB 7Асинхронный аудит
  • RabbitMQ 3Месседж-брокер
  • Redis 7PSR-6 кэш + сессии
  • Elasticsearch 8Полнотекстовый поиск
  • MercureRealtime (SSE/WS)

Frontend

  • React 18TypeScript 5, Vite 5
  • Tailwind 3.4shadcn/ui
  • TanStack Query 5Серверное состояние
  • ZustandКлиентское состояние
  • React Router 6SPA routing, Axios
  • react-i18nextaz / ru / en + любой
  • Flutter 3.27Мобильные (Riverpod)

Infrastructure

  • Docker10+ сервисов
  • GitHub ActionsCI/CD пайплайн
  • NginxReverse proxy
  • MinIOS3-совместимое хранилище
  • CloudflareACM + Total TLS
  • PrometheusМетрики и алерты
  • GrafanaДашборды

Распределение технологий

PHP / Symfony — 34% TypeScript / React — 30% Dart / Flutter — 12% YAML / Config — 12% SQL — 6% Docker / Shell — 6%

API и Аутентификация

RESTful API с мультитенантной аутентификацией

API Architecture

  • OpenAPI спецификации
    Для каждого модуля. Автогенерация TypeScript-клиентов.
  • Префиксы по ролям
    /admin, /public, /pos, /courier, /customer, /superadmin
  • 200+ эндпоинтов
    RESTful, версионированные (/v1/, /v2/).

Auth Flow

POST /auth/login JWT Access (15m)
POST /auth/refresh Refresh Token (7d)
POST /auth/2fa OTP Валидация

Ролевая иерархия:

SUPER_ADMIN OWNER ADMIN MANAGER USER

+ ROLE_COURIER, ROLE_CUSTOMER · RBAC через TenantPermissionVoter

Тенант-резолвер

TenantResolverSubscriber {

Событие: kernel.request (до firewall)

Резолвит tenant по X-Tenant-Slug (nginx) → Host

Проверяет статус (active / trial) → иначе 404

Устанавливает в TenantContext

Изоляция: TenantAwareTrait → WHERE tenant_id = :tenant

}

Событийная архитектура

27 async-сообщений в 10 публикующих пакетах через RabbitMQ + Symfony Messenger

Типы сообщений

  • Inventory (5)

    StockUpdated, снапшоты остатков

  • POS / Order (6)

    OrderCompleted → лояльность + фискализация

  • Tenant (4)

    TenantProvisioned, DNS-провижининг

  • Fiscal / Reporting (3+2)

    Отправка чеков, генерация отчётов

Поток сообщений

Приложение Команда Bus
Bus Handler DB/S3

Middleware цепочка:

AuditMiddleware → TransactionMiddleware → QueueStatsMiddleware → Handler

Аудит: MongoDB для истории событий

QueueStatsMiddleware

Мониторинг очередей в реальном времени. Метрики по каждому типу сообщений: количество, скорость обработки, ошибки.

Фронтенд Архитектура

React 18 monorepo с Vite, Tailwind CSS и TypeScript

pnpm Monorepo

Vite-сборка и dev-сервер под каждое приложение. Общие пакеты, HMR, типы из OpenAPI.

UI Kit (@snap/ui)

Radix UI primitives + Tailwind. 30+ компонентов: DataTable, Modal, Form, Chart, Timeline.

API Client (@snap/api-client)

Axios-based клиент с интерцепторами для JWT, рефреша токенов.

State Management

Серверное состояние

TanStack Query (React Query) для:

  • • Кэширование API запросов
  • • Оптимистичные обновления
  • • Инвалидация кэша по событиям
  • • Пагинация и бесконечная загрузка

Клиентское состояние

Zustand для:

  • • UI состояние (модалки, сайдбары)
  • • Текущий пользователь и роли
  • • Настройки интерфейса
  • • Формы и черновики

Модель данных

PostgreSQL 16 с доменной изоляцией

Core Domain

  • Tenant (c 10+ entity)
  • Пользователи + роли
  • Организационная структура

Catalog & Inventory

  • Товары (многоуровневые)
  • Категории и атрибуты
  • Склады и остатки

Orders & POS

  • Заказы и транзакции
  • Платежи и возвраты
  • Смены и Z-отчёты

Pricing & Fiscal

  • Ценообразование (правила)
  • Налоги и ставки
  • Фискальные данные

Loyalty & CRM

  • Клиенты и сегменты
  • Баллы и кошельки
  • Кампании и триггеры

AI & Analytics

  • Мультипровайдерный LLM
  • Отчёты, снапшоты, дашборды
  • Экспорт (CSV/XLSX/PDF)

Ключевые технологии БД

UUID v7
Первичные ключи
bcmath
Денежные типы
Soft-delete
Все entity
Doctrine ORM
PostgreSQL 16

Безопасность

Многоуровневая система защиты данных

Аутентификация

  • JWT Access Token 15 минут
  • Refresh Token 7 дней
  • 2FA (OTPHP) TOTP
  • Stateless Auth JWT

Авторизация

Ролевая иерархия с descending permissions:

SUPER_ADMIN Полный доступ ко всем тенантам
OWNER Владелец бизнеса
ADMIN Управление заведением
MANAGER Оперативное управление
USER Базовый доступ
COURIER / CUSTOMER Курьер и гость

RBAC: TenantPermissionVoter · PERMISSION_<domain>.<resource>.<verb>

Инфраструктурная

  • Cloudflare ACM + Total TLS
  • HSTS заголовки
  • CORS политики

Прикладная

  • Rate Limiting
  • Валидация номеров
  • XSS-фильтры

Данные

  • Tenant-изоляция (app-level)
  • Аудит в MongoDB
  • Автоматический бэкап

Инфраструктура

Cloud-native архитектура с Docker-оркестрацией

Docker Compose: 10 сервисов

PHP-FPM
Symfony 8 app
PostgreSQL 16
Основная БД
MongoDB 7
Аудит событий
RabbitMQ
Message broker
Elasticsearch
Поиск
Redis
Кэш + сессии
MinIO
S3 хранилище
Nginx
Reverse proxy
Mercure
Realtime (SSE/WS)

CI/CD Pipeline

  • GitHub Actions: PHP-CS-Fixer, PHPStan
  • PHPUnit тесты
  • Docker Build & Push
  • Автоматический бэкап БД через pg_dump + S3

Security & Network

  • Cloudflare ACM + Total TLS
  • JWT Access + Refresh tokens
  • 2FA (OTPHP)
  • Ролевая иерархия (5 уровней)

Интеграции

Гибкая платформа для интеграции с внешними сервисами

i

iiko / Exchange

Реализовано

Движок импорта (модуль Exchange): перенос каталога, заказов и клиентов из iiko, Excel и CSV. Парсер + applier для миграции данных.

Telegram Bot

Реализовано

Кастомный Telegram бот для уведомлений о заказах, отчётов и управления. Webhook интеграция.

Фискальные рег-ры

Реализовано

Поддержка фискальных регистраторов. Чекопечать, Z-отчёты, фискальные накопления.

S3 (MinIO)

Реализовано

Flysystem для единого S3-интерфейса. Изображения, документы, бэкапы.

Elasticsearch

Реализовано

Полнотекстовый поиск по товарам, заказам, клиентам. Синонимы и автодополнение.

AI (LLM)

Реализовано

Модуль AI: мультипровайдерная интеграция LLM, конфигурация моделей по фичам, зашифрованные ключи, учёт использования.

Telegram Bot Архитектура

/start → Register (user → tenant binding)

/report → GetDailyReportQuery → PDF

/order N → GetOrderDetailQuery

Webhook → TelegramWebhookController → MessageHandler

Мониторинг и Observability

Полная наблюдаемость системы в реальном времени

Grafana

Визуализация метрик. Дашборды для бизнеса и технические. CPU, RAM, RPS, Latency p95.

Prometheus

Сбор метрик: очередь сообщений, запросы к БД, HTTP статусы, бизнес-метрики.

Логирование

Структурированные логи. MongoDB для аудита событий. QueueStatsMiddleware.

Ключевые метрики

p95 < 200ms
Latency API
99.9%
Uptime
10000/s
RPS capacity
15m
Alert response

Тестирование и QA

Многоуровневая стратегия обеспечения качества

PHPStan
Level 8

Максимальный уровень статического анализа

PHPUnit
CI/CD

Юнит-тесты для каждого модуля

CS-Fixer
PSR-12

Автоматическое форматирование кода

TypeScript
strict

Полная типизация фронтенда

Pipeline качества

Commit PHP-CS-Fixer PHPStan 8 deptrac (слои) PHPUnit Deploy

О компании

Миссия, ценности и команда Invelio

Миссия

Сделать управление ресторанным и розничным бизнесом простым, прозрачным и эффективным с помощью современных облачных технологий.

Команда

Распределённая команда с экспертизой в PHP, React, DevOps и управлении продуктами. Активно используем AI-агентов в работе.

Ценности

Quality first: PHPStan level 8, строгая типизация. Enterprise ready: мультитенантность, безопасность, масштабируемость.

Контакты

© 2026 Neomax.AZ. Все права защищены.