architect/_archive/2025-11-09-marketplace-old/marketplace-mvp/MP1-ROADMAP.md

🗺️ MP1 ROADMAP - План развития проекта

Проект: Marketplace MVP (mp1)
Версия: 2.4.0
Дата обновления: 2025-11-08


📑 СОДЕРЖАНИЕ

  1. 🔄 ПЛАН ПЕРЕСОЗДАНИЯ ПРОЕКТА v3.0.0
  2. Текущий статус
  3. Приоритеты проекта
  4. Roadmap на 3 месяца
  5. TODO первоочередные
  6. Метрики успеха
  7. Будущее (после 3 месяцев)

🔄 ПЛАН ПЕРЕСОЗДАНИЯ ПРОЕКТА v3.0.0 {#план-пересоздания-проекта-v300}

Дата начала: 2025-11-08
Цель: Полное пересоздание проекта с нуля, модуль за модулем
Принцип: Без дизайна, только стандартные библиотеки

📊 Граф зависимостей модулей

1. Core (БД, auth, config)
   └─> 2. Legal Entities (юр.лица)
        └─> 3. Channels (каналы продаж)
             └─> 4. Products (товары)
                  └─> 5. Orders (заказы)  зависит от Products!
                       └─> 6. Returns (возвраты)
                            └─> 7. Analytics (анализ)
                                 └─> 8. Settings (управление)

✅ Последовательность создания

1. Core (auth, database, config)

3. Channels (подключение каналов Ozon)

4. Products (управление товарами - PIM + Маркетплейсы)

Архитектура 3 типов каталогов:
1. PIM (Product Information Management) - главный источник истины
- Оригинальные артикулы (SKU мастер)
- Полное описание, характеристики, размеры, вес, изображения

  1. Каталоги маркетплейсов - для каждой площадки свой
    - Ozon: свои артикулы (ozon_sku)
    - Wildberries: свои артикулы (wb_sku)
    - Яндекс.Маркет: свои артикулы (ym_sku)
    - Артикулы могут совпадать между площадками

  2. Сопоставления - связи PIM ↔ Маркет (ProductMapping)
    - Автосопоставление по штрихкоду/артикулу
    - Ручное сопоставление

Страница "Товары" - динамические вкладки:
1. PIM Каталог - главный каталог (всегда первая вкладка)
2. Вкладки по каналам - создаются автоматически для каждого подключенного канала:
- Пример: ООО "Продажи 1" - Ozon Склад А
- Пример: ООО "Продажи 1" - Ozon Склад Б
- Пример: ООО "Продажи 2" - Wildberries
- Пример: ООО "Продажи 2" - Яндекс.Маркет

Структура вкладок:

[PIM Каталог] [ООО1-Ozon-А] [ООО1-Ozon-Б] [ООО2-WB] [ООО2-ЯМ]
                ↑ динамически генерируются из таблицы Channel

Отдельный подмодуль:
- Сопоставления товаров - отдельная страница для управления связями PIM ↔ Каналы

Workflow:
- Создать товар в PIM → Страница создания
- Клик на товар → Отдельная страница товара (редактирование всех полей)
- 📋 Копировать внутри PIM (для адаптации под маркет)
- 📥 Загрузить с маркета в PIM
- 📤 Выгрузить из PIM на маркет
- 🔗 Автосопоставление (по ШК/артикулу)

Страница товара (детали):
- URL: /product/{product_id}
- Все поля доступны для редактирования
- Секции: Основное, Характеристики, Изображения, Цены, Остатки (только просмотр)
- Кнопки: Сохранить, Отменить, Удалить, Копировать
- История изменений (кто, когда, что изменил)

Подмодули Products (v3.0+):
- Сопоставления товаров (v3.0) - отдельная страница управления связями PIM ↔ Каналы
- Таблица маппинга: PIM SKU ↔ Channel SKU
- Автосопоставление по штрихкоду/артикулу
- Ручное сопоставление
- Удаление связей

Отдельные модули (v4.0+):
- Остатки (отдельная страница)
- Цены (отдельная страница)
- Мультикарточки (вариации: цвет, размер, количество)
- Нечеткий поиск с пониманием количеств

5. Orders (заказы FBS/realFBS)

6. Returns (возвраты и утряска)

7. Analytics (дашборды)

8. Settings (конфигурация)

🎨 UI: Встроенный Streamlit + минимальный CSS

🎨 Стилизация проекта:
- Основная тема: .streamlit/config.toml (цвета, шрифты)
- Primary: #3B82F6 (Blue)
- Background: #FFFFFF (White)
- Secondary BG: #F9FAFB (Gray 50)
- Text: #374151 (Gray 700)
- Минимальный CSS: styles/main.css (только скрытие элементов Streamlit)
- Хелперы: utils/styles.py (load_css(), apply_page_config())
- Иконки: Emoji (✅ ❌ 📦 🔧 ✉️ 📊)
- Компоненты: st.metric(), st.tabs(), st.columns()

❌ НЕ используем:
- Кастомные стили CSS (кроме минимума)
- Hydralit components
- st_aggrid (сложный)
- Сложные UI библиотеки

✅ Используем только:
- st.dataframe(), st.table() - таблицы
- st.button(), st.text_input(), st.selectbox() - формы
- st.columns() - layout
- st.tabs() - группировка
- plotly.express - графики (стандартная библиотека)
- st.metric() - метрики
- st.sidebar - навигация

📦 Workflow пересоздания

Для каждого модуля:

  1. Обсуждаем требования - что должен делать модуль
  2. Пишем модели БД - database/models.py
  3. Создаём миграцию - Alembic
  4. Пишем бизнес-логику - modules/<module>/
  5. Создаём страницу - pages/<N>_<Module>.py
  6. Тестируем - вручную + автотесты
  7. Коммитим - git commit с описанием
  8. Удаляем старый код - после проверки работы нового

⚡ Правила работы

  1. Код без вопросов - пишу код сам, обсуждаю только изменения в документацию
  2. Простота - минимум зависимостей, только стандартные библиотеки
  3. Модульность - каждый модуль независим
  4. Тестируемость - понятный код, явные зависимости
  5. Документация - обновляем CHANGELOG и ROADMAP после каждого модуля

📊 ТЕКУЩИЙ СТАТУС {#текущий-статус}

Версия: 2.4.0
Дата: 2025-11-08

Что работает ✅

Что НЕ работает ❌


🎯 ПРИОРИТЕТЫ ПРОЕКТА {#приоритеты-проекта}

Бизнес-модель

Основная схема работы: realFBS (своя доставка)

Проект создаётся для всех случаев (FBO/FBS/realFBS поддерживаются), но приоритет на:

  1. realFBS - полный цикл своей доставки через СДЭК/Почту России
  2. Дропшиппинг - работа с поставщиками
  3. Учет остатков - резервирование и списание

Приоритеты по важности

🔴 КРИТИЧНО (должно быть):
1. Интеграция СДЭК API + Почта России API
2. Автоматическая обработка realFBS заказов
3. Учет остатков (базовый)

🟡 ВАЖНО (нужно сделать):
4. Дропшиппинг (модели + UI)
5. Замены товаров
6. Обработка возвратов (расширенная)

🟢 ЖЕЛАТЕЛЬНО (nice to have):
7. Аналитика и отчёты
8. Telegram бот уведомления
9. Другие маркетплейсы (WB, Яндекс.Маркет)


📅 ROADMAP НА 3 МЕСЯЦА {#roadmap-на-3-месяца}

🔴 МЕСЯЦ 1: Обработка заказов realFBS

Цель: Полный автоматический цикл от заказа Ozon до доставки покупателю

Дедлайн: 2025-12-08

Неделя 1-2: Интеграции доставки

Задачи:
- [ ] Модуль СДЭК API (modules/delivery/cdek.py)
- [ ] Класс CdekAPI с базовыми методами
- [ ] create_order() - создание заказа
- [ ] get_label() - получение этикетки (PDF)
- [ ] get_tracking() - получение трек-номера
- [ ] track_status() - отслеживание статуса доставки
- [ ] Тестирование на СДЭК sandbox

Результат недель 1-2:
- ✅ 2 рабочих модуля API (СДЭК + Почта)
- ✅ Тесты на sandbox проходят
- ✅ Документация в MP1-API-GUIDE.md

Неделя 3-4: Автоматизация realFBS workflow

Задачи:
- [ ] Автосоздание заказов в доставке
- [ ] При загрузке заказа Ozon (realFBS) → автоматически создать в СДЭК/Почте
- [ ] Выбор службы доставки (настройка по умолчанию)
- [ ] Обработка ошибок создания заказа

Результат недель 3-4:
- ✅ Заказ Ozon (realFBS) обрабатывается автоматически
- ✅ Трек-номера загружаются на Ozon
- ✅ Статусы синхронизируются
- ✅ E2E тест проходит

Результат месяца 1:

Заказ Ozon → Автоматически СДЭК/Почта → Этикетка → Трек на Ozon → Доставка

🟡 МЕСЯЦ 2: Остатки и дропшиппинг

Цель: Учет остатков с резервированием + работа с поставщиками

Дедлайн: 2026-01-08

Неделя 1-2: Учет остатков

Задачи:
- [ ] Модель StockMovement (database/models.py)
python id, warehouse_id, product_id, variant_id quantity_before, quantity_after, quantity_delta movement_type # in/out/reserve/unreserve/correction/return order_id, user_id, reason, created_at

Результат недель 1-2:
- ✅ Остатки учитываются корректно
- ✅ Резервирование работает при заказе
- ✅ Списание работает при отгрузке
- ✅ История движений сохраняется

Неделя 3-4: Дропшиппинг

Задачи:
- [ ] Модель Supplier (database/models.py)
python id, user_id, name, supplier_type # dropshipper/wholesale/manufacturer contact_person, phone, email, address, inn contract_number, payment_terms # 7/14/30 дней is_dropshipper, margin_percent, rating, active

Результат недель 3-4:
- ✅ Поставщики добавлены в систему
- ✅ Товары связаны с поставщиками
- ✅ Остатки на складах дропшипперов учитываются
- ✅ Автозаказ работает (при отсутствии на складе)

Результат месяца 2:

Заказ Ozon (нет остатка) → Автозаказ у дропшиппера → Получение → Отгрузка

🟢 МЕСЯЦ 3: Подмены и расширенные возвраты

Цель: Гибкая работа с ассортиментом + полная обработка возвратов

Дедлайн: 2026-02-08

Неделя 1-2: Подмены товаров

Задачи:
- [ ] Модель Substitution (database/models.py)
python id, product_id, substitute_product_id substitution_type # auto/manual/ai_suggested/approved priority, max_price_diff_percent active, auto_apply, times_used, last_used_at ai_confidence, ai_reason, created_by

Результат недель 1-2:
- ✅ Подмены настраиваются
- ✅ Автоматическая подмена работает при отсутствии товара
- ✅ История подмен сохраняется

Неделя 3-4: Расширенные возвраты

Задачи:
- [ ] Улучшить модель Return
- [ ] Добавить поля для детальной обработки
- [ ] Связь с StockMovement (возврат на склад)

Результат недель 3-4:
- ✅ Возвраты загружаются с Ozon
- ✅ Обработка возврата работает (деньги + склад)
- ✅ Статистика показывает проблемные товары

Результат месяца 3:

Полная обработка исключительных ситуаций:
- Нет товара → Подмена
- Возврат → Обработка → Статистика

🔥 TODO ПЕРВООЧЕРЕДНЫЕ (2 недели) {#todo-первоочередные}

🔴 Критично (сделать сейчас)

1. СДЭК API интеграция (3 дня)

Дедлайн: 2025-11-11

Документация: https://api-docs.cdek.ru/

2. Почта России API (2 дня)

Дедлайн: 2025-11-13

Документация: https://otpravka.pochta.ru/specification

3. Автоматизация realFBS workflow (3 дня)

Дедлайн: 2025-11-16

🟡 Важно (следующие 2 недели)

4. StockMovement модель (1 день)

Дедлайн: 2025-11-17

5. Базовый учет остатков (2 дня)

Дедлайн: 2025-11-19


📊 МЕТРИКИ УСПЕХА {#метрики-успеха}

После месяца 1 (2025-12-08)

После месяца 2 (2026-01-08)

После месяца 3 (2026-02-08)


🔮 БУДУЩЕЕ (после 3 месяцев) {#будущее}

Квартал 2 (апрель-июнь 2026)

Фокус: Расширение интеграций + аналитика

Квартал 3 (июль-сентябрь 2026)

Фокус: Финансы + команда

Квартал 4 (октябрь-декабрь 2026)

Фокус: Автоматизация + AI


Последнее обновление: 2025-11-08
Автор: MP1 Team