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

Архитектура системы

Архитектура OpenMPFlow — сервисы, API, модель данных, плагины, миграции

Сервисы

OpenMPFlow запускается как три Docker-контейнера:

┌─────────────────┐     ┌─────────────────┐     ┌──────────────────┐
│    Admin UI     │────▶│     Proxy       │────▶│   PostgreSQL     │
│    (nginx)      │     │   (FastAPI)     │     │                  │
│    port 3000    │     │   port 8000     │     │   port 5432      │
└─────────────────┘     └─────────────────┘     └──────────────────┘
  • Admin UI — vanilla JS SPA с Tailwind CSS, раздаётся через nginx
  • Proxy — FastAPI backend с 4 API поверхностями
  • PostgreSQL — все данные, 24+ файлов миграций

Четыре API поверхности

1. Admin ERP API (/v1/admin/*)

Основной API для Admin UI. 15 доменных роутеров: каталог, заказы, продажи, финансы, отчёты, инвентарь, логистика, планирование, ценообразование, Ozon, интеграции, акции, настройки, пользователи, API-ключи.

Авторизация: API-ключи (mpk_), legacy HMAC-токены.

2. MCP сервер (/mcp)

54 инструмента через Streamable HTTP транспорт. Используется AI-клиентами (Claude, ChatGPT).

Авторизация: API-ключи или OAuth (Logto JWT).

3. Tool API (/v1/tools/invoke)

Вызывается агентами OpenClaw в E2B-песочницах.

4. OAuth endpoints (корневой уровень)

RFC-совместимый OAuth прокси к Logto:

  • /.well-known/oauth-protected-resource
  • /.well-known/oauth-authorization-server
  • /oauth/authorize, /oauth/token, /oauth/register

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

Основные сущности следуют жизненному циклу продавца:

Карточка (SKU) → Заказ поставщику → FIFO-партия → Продажа → Прибыль

Ключевые таблицы

ТаблицаНазначение
master_cardsКаталог товаров (SKU, название, атрибуты, источники)
supplier_ordersЗаказы поставщикам с распределением общих затрат
supplier_order_itemsПозиции заказа с ценами в CNY
fifo_lotsПартии для FIFO-учёта себестоимости
card_salesПродажи с COGS из FIFO-распределения
finance_transactionsРучные записи доходов/расходов
stock_movementsАудит-трейл перемещений товаров
admin_usersАккаунты пользователей с тенантной изоляцией
admin_api_keysAPI-ключи (SHA256 хэш, скоупы)

Тенантная изоляция

Все запросы изолированы по user_id. Каждая таблица содержит user_id и все запросы включают WHERE user_id = $1.

Миграции

SQL-миграции в /migrations/ отслеживаются таблицей schema_migrations. Скрипт scripts/init-db.sh:

  1. Создаёт schema_migrations если не существует
  2. Сканирует init.sql + 0*.sql файлы по порядку
  3. Пропускает уже применённые (идемпотентно)
  4. Записывает каждую применённую миграцию с timestamp

On this page