Модуль: Logistic / Architecture
Версия: 2.0
Дата: Февраль 2026
Заменяет: adolf_logistic_1_architecture_v1_0.md
1.1 Обзор архитектуры
Принципы проектирования
| Принцип | Описание |
|---|---|
| Модульность | Независимые компоненты с чёткими интерфейсами |
| Отказоустойчивость | Graceful degradation при недоступности Ozon API или файла 1С |
| Кэширование | Минимизация запросов к API через Redis |
| Асинхронность | Фоновая синхронизация через Celery |
| Dual-source | Два независимых источника данных: Ozon API + файловый импорт 1С |
| Расширяемость | Подготовка к Wildberries / Yandex.Market в v2.0 |
Архитектурная диаграмма
1.2 Компоненты системы
Слой адаптеров
| Компонент | Назначение | Технология |
|---|---|---|
| OzonLogisticAdapter | Единая точка интеграции с Ozon Seller API | aiohttp |
| FileImportAdapter | Парсинг XLSX/XML файлов из 1С | openpyxl / lxml |
| RateLimiter | Контроль частоты запросов к Ozon API | Redis + asyncio |
| RetryHandler | Повторные попытки при ошибках | tenacity |
Слой сервисов
| Сервис | Назначение | Входные данные | Выходные данные |
|---|---|---|---|
| StockService | Получение и кэширование остатков FBO по кластерам | Ozon API | ClusterStock[] |
| AnalyticsService | Получение аналитики продаж и оборачиваемости | Ozon API | SalesData[], Turnover[] |
| WarehouseService | Управление списком кластеров/складов | Ozon API | Warehouse[] |
| SupplyTaskService | CRUD наряд-заданий, workflow статусов | Domain models | SupplyTask[] |
| AlertService | Генерация и отправка алертов | Domain events | Alert[] |
| ImportService | Импорт и валидация файлов 1С | FileImportAdapter | WarehouseStock[] |
Доменный слой
| Компонент | Назначение | Логика |
|---|---|---|
| StockMonitor | Отслеживание уровня остатков по кластерам | Сравнение с порогами, расчёт дней до обнуления |
| DemandForecaster | Прогноз спроса по кластерам | Weighted moving average, тренды, сезонность |
| SupplyCalculator | Расчёт оптимального распределения | Дефицит = Прогноз − Остаток FBO − В пути |
| TaskGenerator | Формирование наряд-заданий | Приоритизация, проверка наличия на складе 1С |
1.3 Потоки данных
Поток 1: Синхронизация остатков Ozon
Поток 2: Импорт остатков 1С
Поток 3: Формирование наряд-заданий
Поток 4: Workflow наряд-задания
1.4 Интеграция с ADOLF Core
Используемые компоненты Core
Middleware интеграция
| Middleware | Использование |
|---|---|
AuthMiddleware | Валидация JWT/API Key |
RoleMiddleware | Проверка прав доступа |
BrandFilterMiddleware | Фильтрация данных по brand_id |
PromptInjectionMiddleware | Добавление контекста для AI |
Shared PostgreSQL схема
Модуль Logistic использует:- Собственные таблицы с префиксом
logistic_* - Общие таблицы Core:
users,brands,notifications - FK связи с другими модулями минимизированы
1.5 Структура кодовой базы
1.6 Конфигурация
Переменные окружения
Пример .env
1.7 Кэширование
Стратегия кэширования
| Данные | Хранилище | TTL | Ключ Redis |
|---|---|---|---|
| Остатки FBO по кластерам | Redis | 25 мин | logistic:ozon:stocks:{date} |
| Аналитика продаж | Redis | 1 час | logistic:ozon:analytics:{date} |
| Оборачиваемость | Redis | 1 час | logistic:ozon:turnover:{date} |
| Список кластеров | Redis | 7 дней | logistic:ozon:warehouses |
| Остатки 1С | Redis | до след. импорта | logistic:1c:stocks:{import_id} |
Структура кэша остатков по кластерам
Структура кэша остатков 1С
Cache-aside pattern
1.8 Обработка ошибок
Типы ошибок
| Ошибка | Источник | Код | Обработка |
|---|---|---|---|
OzonAPIError | Ozon API | 500 | Retry с exponential backoff |
OzonRateLimitError | Ozon API | 429 | Ожидание, затем retry |
OzonAuthError | Ozon API | 401/403 | Алерт администратору |
FileImportError | 1С файл | — | Логирование, алерт, пропуск файла |
FileFormatError | 1С файл | — | Логирование, уведомление |
SKUMappingError | Маппинг | — | Логирование, пропуск записи |
DataValidationError | Любой | 422 | Логирование, пропуск записи |
CacheError | Redis | — | Fallback на прямой запрос |
Retry стратегия
Circuit Breaker
Обработка ошибок файлового импорта 1С
1.9 Мониторинг и логирование
Метрики (Prometheus)
| Метрика | Тип | Описание |
|---|---|---|
logistic_ozon_api_requests_total | Counter | Общее число запросов к Ozon API |
logistic_ozon_api_errors_total | Counter | Ошибки Ozon API |
logistic_ozon_api_latency_seconds | Histogram | Латентность запросов |
logistic_stocks_sync_duration_seconds | Histogram | Время синхронизации остатков |
logistic_1c_imports_total | Counter | Количество импортов 1С |
logistic_1c_import_errors_total | Counter | Ошибки импорта 1С |
logistic_supply_tasks_generated_total | Counter | Сгенерированные наряд-задания |
logistic_supply_tasks_completed_total | Counter | Выполненные наряд-задания |
logistic_alerts_generated_total | Counter | Сгенерированные алерты |
logistic_cluster_deficit_total | Gauge | Текущий дефицит по кластерам |
Структурированное логирование
1.10 Безопасность
API ключи Ozon
| Аспект | Реализация |
|---|---|
| Хранение | Переменные окружения / Vault |
| Формат | Client-Id + Api-Key (два параметра) |
| Передача | HTTP заголовки Client-Id, Api-Key |
| Ротация | Поддержка hot-reload конфигурации |
| Аудит | Логирование всех API-вызовов |
Безопасность файлового импорта
| Аспект | Реализация |
|---|---|
| Директория импорта | Ограниченные права доступа (0750) |
| Валидация файлов | Проверка расширения, размера, структуры |
| Максимальный размер | 50 МБ |
| Карантин | Некорректные файлы перемещаются в /quarantine |
| Архивирование | Обработанные файлы → /archive с timestamp |
Доступ к данным
1.11 Масштабирование
Горизонтальное масштабирование
| Компонент | Стратегия |
|---|---|
| API | Stateless, несколько инстансов за LB |
| Celery Workers | Увеличение числа воркеров |
| Redis | Cluster mode (при необходимости) |
| PostgreSQL | Read replicas (v2.0) |
| Файловый импорт | Один обработчик, очередь файлов |
Ограничения Ozon API
| Аспект | Значение | Стратегия |
|---|---|---|
| Rate limit | ~5 RPS (базовый) | Регулируемый RateLimiter |
| Premium rate limit | Расширенный | Настройка при наличии Premium |
| Пагинация | offset/limit, cursor | Автоматическая обработка |
| Размер ответа | До 1000 записей | Пагинация с аккумуляцией |
1.12 Диаграмма развёртывания
1.13 Зависимости
Python пакеты
Внутренние зависимости
| Модуль | Зависимость | Тип |
|---|---|---|
| Core | Middleware, PostgreSQL, Redis, Celery, Notifications | Hard |
| CFO | Отправка данных о логистических издержках | Soft (v2.0) |
| Scout | Получение прогнозов продаж | Soft (v2.0) |
1.14 Структура файлов модуля
Документ подготовлен: Февраль 2026
Версия: 2.0
Статус: Черновик
Заменяет: adolf_logistic_1_architecture_v1_0.md