Локальная рекомендательная система для менеджера продаж. Она анализирует синтетическую историю заказов и каталог товаров, объясняет рекомендации и показывает данные через web-интерфейс и JSON API.
Статус: локально проверенный MVP на демонстрационных данных. Это не production-ready сервис.
Система помогает менеджеру быстро подготовить варианты допродажи и замены товара во время работы с заказом. Основные пользователи — менеджеры продаж и руководители, проверяющие гипотезу рекомендательного инструмента.
Четыре направления рекомендаций:
- Сопутствующие товары — позиции, встречавшиеся в одних документах с выбранным товаром.
- Аналоги — симметричные связи из отдельного JSON-справочника.
- Популярные товары клиента — позиции из его истории за заданный период.
- Новые товары — рекомендации с исключением уже купленных позиций и fallback по общей популярности.
Также реализованы:
- объяснение причины и признаков рекомендации;
- объединённое бизнес-ранжирование с учётом маржи и остатка;
- фильтрация недоступных позиций в итоговых бизнес-рекомендациях;
- HTTP API и внутренний web-интерфейс;
- локальная SQLite-аналитика событий;
- поиск клиентов, оформление демонстрационного заказа и экспорт аналитики;
- автоматические тесты алгоритмов, загрузки данных, API-функций, аналитики и адаптеров.
Нюанс остатков: объединённые рекомендации исключают позиции с нулевым остатком. Отдельные аналитические endpoints «топ клиента», «сопутствующие» и «аналоги» могут возвращать такую позицию вместе с stock=0, чтобы интерфейс явно показал недоступность.
Основной публичный сценарий работает только с demo/*.csv и demo/*.json.
Код файловой синхронизации и HTTP-adapter сохранён как часть фактической архитектуры и покрыт тестами на временных синтетических данных. Прямая онлайн-интеграция с 1С в публичной версии отсутствует и end-to-end не проверялась. Рабочие EPF/BSL/XML, выгрузки, токены и внутренние инструкции не публикуются.
flowchart LR
Demo["Синтетические CSV/JSON"] --> Load["Загрузка и очистка"]
Load --> Models["4 алгоритма рекомендаций"]
Models --> API["HTTP API"]
API --> UI["Web-интерфейс"]
API --> DB["Runtime SQLite analytics"]
Adapter["Файловый/HTTP adapter"] -. "не проверен live" .-> API
Подробности: docs/architecture.md и docs/data-format.md.
Требуется Python 3.11 или новее. В базовом режиме внешних библиотек нет.
python -m venv .venv
.\.venv\Scripts\python -m pip install --disable-pip-version-check -r requirements.txt.env.example перечисляет поддерживаемые переменные, но файл автоматически не загружается: приложение читает окружение ОС. Для демонстрационного запуска настройки и секреты не требуются.
.\.venv\Scripts\python app.pyОткройте http://127.0.0.1:8000. Интерфейс обслуживается тем же локальным сервером; отдельной сборки frontend нет.
Docker Compose в репозитории отсутствует и не заявляется.
- Запустите сервер.
- Выберите синтетического клиента, например
C001. - Добавьте товар
P001в корзину и изучите сопутствующие позиции с объяснениями. - Откройте топ клиента, аналоги и режим новых товаров.
- Сравните ответы с demo/example_response.json.
Все данные в demo/ вымышлены. Схемы файлов описаны в docs/data-format.md.
GET /api/health— проверка сервера;GET /api/bootstrap— каталог, клиенты и базовые показатели;GET /api/clients/search?q=...— поиск клиента;GET /api/clients/{id}/top-products— популярные товары клиента;GET /api/products/{id}/companions— сопутствующие товары;GET /api/products/{id}/analogs— аналоги;GET /api/analytics— локальные агрегаты;GET /api/data-health— состояние демонстрационных данных.
Служебные sync/order endpoints не относятся к основному публичному demo-сценарию; без токена и URL внешняя отправка не настроена.
analytics_store.py создаёт локальную SQLite-базу во время запуска. Таблица events хранит время, тип события, синтетические идентификаторы клиента/сессии/товара и JSON payload. База является генерируемым runtime-файлом и не публикуется.
.\.venv\Scripts\python -m unittest -v- небольшой demo-набор показывает механику, но не подтверждает качество на реальной истории продаж;
- веса бизнес-ранжирования являются правилами текущего MVP;
- SQLite рассчитан на локальный сценарий, а не многопользовательскую нагрузку;
- live-обмен с 1С не проверен;
- приложение не содержит полноценной ролевой модели;
- рабочие коммерческие метрики и результаты внедрения не заявляются.
- согласованный offline-набор для оценки рекомендаций;
- конфигурируемые правила ранжирования по категориям;
- отдельная аутентификация администратора и менеджера;
- наблюдаемость и управляемая синхронизация для пилотной среды.