Проект: Marketplace MVP (mp1)
Версия: 2.4.0
Дата создания: 2025-11-07
Последнее обновление: 2025-11-08
Статус: В разработке
Система управления продажами на маркетплейсах (Ozon, Wildberries, Яндекс.Маркет).
Основной функционал:
- Автоматическое подключение каналов продаж
- Управление юридическими лицами
- Управление складами и логистикой
- Обработка заказов (FBO/FBS/realFBS)
- Учёт товаров
Для кого:
- Продавцы на маркетплейсах
- Дропшипперы
- Агрегаторы товаров
Основная схема работы: realFBS (своя доставка)
Проект создаётся для всех случаев (FBO/FBS/realFBS поддерживаются), но приоритет на:
1. realFBS - своя доставка через СДЭК/Почту России
2. Дропшиппинг - работа с поставщиками
3. Учёт остатков - резервирование и списание
User (пользователи)
↓
LegalEntity (юр.лица) → связь по ИНН
↓
Channel (каналы продаж)
↓
├─ Warehouse (склады)
├─ DeliveryService (службы доставки)
└─ ChannelStatusMapping (маппинг статусов)
Order (заказы)
├─ OrderItem (позиции заказа)
└─ OrderStatusHistory (история статусов)
Product (товары)
├─ ProductVariant (вариации)
├─ ProductImage (картинки)
└─ ProductChannelMapping (связь с каналами)
Supplier (поставщики - будущее)
└─ SupplierProduct (товары поставщика)
Return (возвраты)
StockMovement (движение остатков - будущее)
Substitution (замены товаров - будущее)
ER Диаграмма: См. docs/diagrams/database_er.png (создать)
На маркетплейсе Ozon существует 3 основные схемы обработки заказов:
Суть: Товар хранится на складе Ozon, Ozon полностью берёт на себя обработку и доставку.
Товар → Склад Ozon → Заказ → Ozon упаковывает → Ozon доставляет → Покупатель
Что делает продавец:
- Поставляет товар на склад Ozon (FBO-поставки)
- Следит за остатками
- Обрабатывает возвраты (опционально)
Что делает Ozon:
- Хранит товар
- Упаковывает заказы
- Генерирует этикетки
- Доставляет покупателю
- Обрабатывает возвраты
SLA:
- Поставка на склад: минимум за 12 часов до забора
- Доставка покупателю: 1-7 дней (зависит от региона)
Суть: Товар хранится на складе продавца, но доставляет Ozon.
Заказ → Продавец собирает → Ozon забирает → Ozon доставляет → Покупатель
Что делает продавец:
- Хранит товар на своём складе
- Получает заказ → собирает → упаковывает
- Печатает этикетки Ozon
- Передаёт заказы курьеру Ozon
Что делает Ozon:
- Забирает заказы со склада продавца (по графику: 10:00, 15:00)
- Доставляет покупателю
- Обрабатывает возвраты (частично)
SLA:
- Время на сборку: 24 часа с момента заказа
- График забора курьером Ozon: 10:00, 15:00 (ежедневно)
Важно:
- Этикетки генерирует Ozon (не СДЭК, не Почта!)
- Трекинг ведёт Ozon
- Акт для курьера получаете через Ozon API
Суть: Товар хранится на складе продавца, доставляет продавец (или его служба доставки).
Заказ → Продавец собирает → Продавец доставляет → Покупатель
↓
Свои этикетки (СДЭК/Почта/курьер)
Свой трек-номер
Что делает продавец:
- Хранит товар
- Собирает и упаковывает
- Генерирует свои этикетки (через СДЭК API / Почта API / свои)
- Доставляет сам (курьером или через службу)
- Загружает свой трек-номер на Ozon
Что делает Ozon:
- Передаёт заказы продавцу
- Следит за соблюдением SLA
- Принимает трек-номера от продавца
SLA (3 типа):
| Тип | Код | Время доставки | Конверсия |
|---|---|---|---|
| Стандартная | standard |
До 30 дней | Базовая |
| Срочная (Comfort) | comfort |
До 8 часов | +8% |
| Экспресс | express |
До 30 минут | +13% |
Важно:
- Этикетки генерируете вы (через API СДЭК/Почты или свои)
- Трек-номер ваш (от СДЭК/Почты/своего курьера)
- Акты доставки ваши (не Ozon)
| Параметр | FBO | FBS | realFBS |
|---|---|---|---|
| Хранение | Ozon | Продавец | Продавец |
| Доставка | Ozon | Ozon | Продавец |
| Этикетки | Ozon | Ozon | Свои |
| Трекинг | Ozon | Ozon | Свой |
| Контроль | Минимальный | Средний | Полный |
| Комиссия | Высокая | Средняя | Низкая |
| Тип | Код | Описание |
|---|---|---|
| Собственный | own |
Физический склад продавца |
| Маркетплейс | marketplace |
Склад маркетплейса (FBO) |
| Дропшиппер | dropshipper |
Склад партнёра-дропшиппера |
| Партнёр | partner |
Склад партнёра для дозаказа |
| Виртуальный | virtual |
Виртуальный склад с фильтрацией |
| Схема | Код | Хранение | Доставка |
|---|---|---|---|
| FBO | fbo |
Маркетплейс | Маркетплейс |
| FBS | fbs |
Продавец | Маркетплейс |
| DBS | dbs |
Продавец | Продавец |
| Crossdock | crossdock |
Транзит | Смешанная |
| Режим | Код | Описание |
|---|---|---|
| Круглосуточно | 24/7 |
Работает всегда |
| По расписанию | schedule |
Определённые часы |
| По запросу | on_demand |
Нужна запись |
OZON:
- Максимум времени на сборку: 24 часа
- Минимум для планирования поставки: 12 часов
- График по умолчанию: 09:00-18:00 пн-пт
WILDBERRIES:
- Максимум на обработку: 120 часов (5 дней)
- Рекомендуется: 24 часа
- График по умолчанию: 08:00-22:00 ежедневно
- Штраф за просрочку: 50% от стоимости (мин. 100₽)
ЯНДЕКС.МАРКЕТ:
- Минимум рабочих дней: 5
- Целевое среднее время отгрузки: 36 часов
- График по умолчанию: 09:00-20:00 пн-вс
id: int
email: str
password_hash: str
full_name: str
role: str # owner/admin/manager/warehouse/viewer
active: bool
created_at: datetime
id: int
user_id: int # FK → User
name_full: str
name_short: str
inn: str # 10 или 12 цифр
ogrn: str
entity_type: str # LLC/IP/CJSC
address: str
director: str
is_default: bool
active: bool
created_at: datetime
id: int
entity_id: int # FK → LegalEntity
channel_name: str
channel_type: str # marketplace/website
platform_type: str # ozon/wildberries/yandex
client_id: str
api_key_encrypted: str
seller_id: str
status: str
active: bool
created_at: datetime
updated_at: datetime
id: int
channel_id: int # FK → Channel
external_id: str
name: str
warehouse_type: str # own/marketplace/dropshipper/partner/virtual
fulfillment_type: str # fbo/fbs/dbs/crossdock
work_mode: str # 24/7/schedule/on_demand
work_schedule: str
is_active: bool
can_ship_anytime: bool
requires_appointment: bool
min_prep_time_hours: int
filter_rules: JSON
address: str
contact_person: str
phone: str
id: int
channel_id: int # FK → Channel
external_id: str
name: str
is_available: bool
delivery_time_from: int
delivery_time_to: int
id: int
channel_id: int # FK → Channel
entity_id: int # FK → LegalEntity
external_order_id: str
order_date: datetime
status_external: str
status_internal: str
# Fulfillment схема
fulfillment_scheme: str # fbo/fbs/realfbs
realfbs_type: str # standard/comfort/express (для realfbs)
# Доставка
delivery_type: str # kts/pvz/courier/post
delivery_service: str # pochta/yandex/kts/cdek/boxberry
# Трекинг
tracking_number: str # Ozon трек (для FBO/FBS)
own_tracking_number: str # Свой трек (для realFBS)
track_uploaded: bool
shipped_at: datetime
# Клиент
customer_name: str
customer_phone: str
customer_email: str
address_json: JSON
items_json: JSON
total_amount: Decimal
created_at: datetime
updated_at: datetime
id: int
user_id: int # FK → User
sku: str
barcode: str
article: str
name: str
description: text
# Тип товара
product_type: str # simple/variant_group/kit/bundle
parent_id: int # FK → Product (для вариаций)
# Категория и бренд
category: str
brand: str
ozon_category_id: int
# Цены
price: Decimal
old_price: Decimal
cost_price: Decimal
min_price: Decimal
# Габариты и вес
weight: int # граммы
width: int # мм
height: int # мм
depth: int # мм
# Остатки
stock_quantity: int
reserved_quantity: int
available_quantity: int
# Статус
is_active: bool
is_visible: bool
# Ozon
ozon_product_id: int
vat: str
created_at: datetime
updated_at: datetime
id: int
order_id: int # FK → Order
channel_id: int # FK → Channel
external_return_id: str
return_reason: str
return_type: str # full/partial
status: str
return_date: datetime
refund_amount: Decimal
refund_date: datetime
warehouse_id: int
restocked: bool
condition: str # new/damaged/defect
notes: text
created_at: datetime
Полный список всех моделей: См. database/models.py
core/theme.py (цвета, константы, хелперы).streamlit/config.toml (Streamlit тема)styles/main.css - 16 строк)marketplace-mvp/
├── app.py # Главная страница
├── requirements.txt # Зависимости
├── alembic.ini # Конфиг Alembic
├── alembic/ # Миграции БД
│ └── versions/
├── core/
│ ├── config.py # Настройки
│ ├── database.py # Подключение к БД
│ ├── auth.py # Авторизация
│ └── theme.py # Тема v3.0.0 (цвета, шрифты, иконки)
├── database/
│ ├── models.py # Все модели SQLAlchemy
│ └── init_db.py # Инициализация БД
├── modules/
│ ├── api/
│ │ └── ozon.py # Ozon API клиент
│ ├── legal_entities/
│ │ ├── crud.py # CRUD юр.лиц
│ │ └── inn_api.py # API ФНС
│ ├── products/
│ │ ├── crud.py # CRUD товаров
│ │ └── queries.py # Запросы
│ ├── orders/
│ │ └── items.py # Обработка заказов
│ ├── negotiation/
│ │ ├── detector.py # Детектор утряски
│ │ └── calculator.py # Калькулятор возвратов
│ ├── status_mapping/
│ │ └── mapper.py # Маппинг статусов
│ └── utils/
│ └── datetime_helper.py # Работа с датами
├── pages/ # Страницы Streamlit
│ ├── 01_🏢_Компании.py
│ ├── 02_📡_Каналы.py
│ ├── 03_🏷️_Товары.py
│ ├── 04_📋_Заказы.py
│ ├── 05_🔙_Возвраты.py
│ └── ...
├── .streamlit/ # Конфигурация Streamlit
│ └── config.toml # Тема v3.0.0 (настройки цветов/шрифтов)
├── utils/
│ └── styles.py # Хелперы загрузки стилей
├── styles/ # Минимальный CSS (16 строк)
│ └── main.css # Скрытие UI элементов Streamlit
├── data/ # Данные
│ └── marketplace.db
├── logs/ # Логи
└── docs/ # Документация
├── diagrams/
└── archive/
Версия: 2.4.0
Дата обновления: 2025-11-08
Инфраструктура:
- ✅ Модели БД (User, LegalEntity, Channel, Warehouse, Order, Product, Return)
- ✅ Авторизация пользователей (Streamlit Authenticator)
- ✅ Миграции Alembic
Функции:
- ✅ 3-шаговый визард подключения каналов Ozon
- ✅ Автоматическое создание/обновление юр.лиц по ИНН (ФНС API)
- ✅ Загрузка справочников с Ozon (склады, службы доставки, статусы)
- ✅ Интеграция Ozon API (полная)
- ✅ Загрузка заказов (FBS/realFBS схемы)
- ✅ Система возвратов и утряски
- ✅ Библиотека работы с датами/временем (datetime_helper)
UI:
- ✅ Компактные таблицы (стиль Airtable)
- ✅ Страницы: Компании, Каналы, Товары, Заказы, Возвраты
Интеграции:
- ❌ СДЭК API (в разработке)
- ❌ Почта России API (в разработке)
- ❌ Wildberries API
- ❌ Яндекс.Маркет API
Функции:
- ❌ Автоматическая обработка realFBS заказов
- ❌ Учёт остатков (StockMovement)
- ❌ Дропшиппинг (Supplier, SupplierProduct)
- ❌ Замены товаров (Substitution)
- ❌ Аналитика и отчёты
- ❌ Telegram бот уведомления
- ❌ Multi-user (роли и права доступа)
Последнее обновление: 2025-11-08
Автор: Marketplace MVP Team