Files
sfera-new/docs/business-processes/SUPPLY_CHAIN_WORKFLOW_V2.md
2025-08-30 15:51:41 +03:00

15 KiB
Raw Blame History

🚚 WORKFLOW ЦЕПОЧКИ ПОСТАВОК SFERA v2.0

⚠️ ВАЖНО: Этот документ описывает НОВУЮ архитектуру системы поставок с разделением на отдельные типы. Для старой системы см. SUPPLY_CHAIN_WORKFLOW.md

🎯 ОБЗОР НОВОЙ СИСТЕМЫ

Система поставок SFERA v2.0 включает 5 типов поставок, разделенных на две категории:

📦 ПОСТАВКИ НА ФУЛФИЛМЕНТ

  • GoodsSupplyOrder - товары селлера → склад ФФ
  • FulfillmentConsumableSupplyOrder - расходники ФФ → склад ФФ
  • SellerConsumableSupplyOrder - расходники селлера → склад ФФ

🛒 ПОСТАВКИ НА МАРКЕТПЛЕЙСЫ

  • OzonSupplyOrder - готовые продукты → Ozon
  • WildberriesSupplyOrder - готовые продукты → Wildberries

🔄 WORKFLOW ПО ТИПАМ ПОСТАВОК

1 WORKFLOW: V2-поставки расходников фулфилмента 🔄

graph TD
    A[ФФ создает заказ расходников] --> B[PENDING]
    B --> C{Поставщик одобряет?}
    C -->|Да| D[SUPPLIER_APPROVED]
    C -->|Нет| X[CANCELLED]
    D --> E{Логистика назначена?}
    E -->|Да| F[LOGISTICS_CONFIRMED] 
    E -->|Нет| D
    F --> G[Поставщик отгружает]
    G --> H[SHIPPED]
    H --> I[IN_TRANSIT]
    I --> J[ФФ принимает на склад]
    J --> K[DELIVERED]
    
    style A fill:#e1f5fe
    style K fill:#c8e6c9
    style X fill:#ffcdd2

Участники:

  • 🏭 Фулфилмент - создатель, получатель
  • 🏪 Поставщик (WHOLESALE) - одобрение, отгрузка
  • 🚛 Логистика (LOGIST) - доставка

Особенности:

  • ФФ видит все детали + устанавливает цены продажи селлерам
  • Поставщик видит товары/количества, НЕ видит цены продажи ФФ
  • Показывается сразу после создания

2 WORKFLOW: V2-поставки товаров

graph TD
    A[Селлер заказывает товары у поставщика] --> B[PENDING]
    B --> C{Поставщик одобряет?}
    C -->|Да| D[SUPPLIER_APPROVED]
    C -->|Нет| X[CANCELLED]
    D --> E{Логистика назначена?}
    E -->|Да| F[LOGISTICS_CONFIRMED]
    E -->|Нет| D
    F --> G[Поставщик отгружает]
    G --> H[SHIPPED]
    H --> I[IN_TRANSIT]
    I --> J[ФФ принимает + обрабатывает]
    J --> K[DELIVERED]
    
    style A fill:#fff3e0
    style K fill:#c8e6c9
    style X fill:#ffcdd2

Участники:

  • 🛒 Селлер - создатель, владелец товара
  • 🏪 Поставщик (WHOLESALE) - поставка
  • 🚛 Логистика (LOGIST) - доставка
  • 🏭 Фулфилмент - получатель, обработка

Особенности:

  • Селлер видит свои товары + рецептуры + закупочные цены
  • ФФ видит товары + рецептуры + услуги, НЕ видит закупочные цены селлера
  • Поставщик видит товары + количества, НЕ видит рецептуры
  • Расходники селлера идут в состав продукта, не отслеживаются отдельно

3 WORKFLOW: V2-поставки расходников селлеров

graph TD
    A[Селлер заказывает "расходники селлера" у поставщика для хранения на ФФ] --> B[PENDING]
    B --> C{Поставщик одобряет?}
    C -->|Да| D[SUPPLIER_APPROVED]
    C -->|Нет| X[CANCELLED]
    D --> E{Логистика назначена?}
    E -->|Да| F[LOGISTICS_CONFIRMED]
    E -->|Нет| D
    F --> G[Поставщик отгружает]
    G --> H[SHIPPED]
    H --> I[IN_TRANSIT]
    I --> J[ФФ принимает НА ХРАНЕНИЕ]
    J --> K[DELIVERED]
    
    style A fill:#f3e5f5
    style K fill:#c8e6c9
    style X fill:#ffcdd2

Участники:

  • 🛒 Селлер - создатель, владелец расходников
  • 🏪 Поставщик (WHOLESALE) - поставка
  • 🚛 Логистика (LOGIST) - доставка
  • 🏭 Фулфилмент - хранитель (НЕ владелец)

Особенности:

  • Селлер видит свои расходники + закупочные цены
  • ФФ видит факт хранения + количества, НЕ видит закупочные цены селлера
  • Срок хранения + права доступа настраиваются
  • Используются селлером в рецептурах своих товаров

📊 СТАТУСЫ И ПЕРЕХОДЫ

SupplyOrderStatus (поставки НА фулфилмент)

Статус Описание Ответственный Действия
PENDING Ожидает одобрения поставщика Поставщик Одобрить/Отклонить
SUPPLIER_APPROVED Одобрено поставщиком Логистика Назначить маршрут
LOGISTICS_CONFIRMED Логистика подтверждена Поставщик Отгрузить товар
SHIPPED Отгружено Система Автоматический переход
IN_TRANSIT В пути Логистика Отслеживание доставки
DELIVERED Доставлено ФФ Принять на склад
CANCELLED Отменено Любой участник Указать причину

MarketplaceSupplyStatus (поставки НА маркетплейсы)

Статус Описание Ответственный Действия
PLANNED Запланирована ФФ Подготовить товары
PREPARED Подготовлена ФФ Отгрузить
SHIPPED_TO_MARKETPLACE Отгружена Маркетплейс Принять товар
ACCEPTED_BY_MARKETPLACE Принята Система Обновить остатки
CANCELLED Отменена ФФ/Маркетплейс Указать причину

🎭 РОЛИ И ПРАВА ДОСТУПА

🏭 ФУЛФИЛМЕНТ

Может создавать:

  • Поставки расходников ФФ
  • Поставки на маркетплейсы

Может видеть:

  • Свои поставки расходников: все детали + цены продажи
  • Товарные поставки селлеров: товары + рецептуры, НЕ закупочные цены
  • Расходники селлеров на хранении: количества, НЕ закупочные цены

🛒 СЕЛЛЕР

Может создавать:

  • Товарные поставки
  • Поставки расходников селлера

Может видеть:

  • Свои товарные поставки: все детали + рецептуры + закупочные цены
  • Свои расходники: все детали + закупочные цены
  • Чужие поставки
  • Поставки расходников ФФ

🏪 ПОСТАВЩИК (WHOLESALE)

Может видеть:

  • Заказы к себе: товары + количества
  • Рецептуры товаров
  • Цены продажи ФФ селлерам
  • Услуги ФФ

🚛 ЛОГИСТИКА (LOGIST)

Может видеть:

  • Маршруты + объемы + вес
  • Коммерческие данные (цены, услуги)
  • Рецептуры товаров

🌐 ИНТЕРФЕЙСЫ СИСТЕМЫ

📦 Кабинет фулфилмента

URL: /fulfillment-supplies/

Вкладки:

  • ff-consumables - поставки расходников ФФ (создание + просмотр)
  • seller-consumables - расходники селлеров на хранении
  • goods?status=new - новые товарные поставки
  • goods?status=receiving - товары в приемке
  • goods?status=accepted - принятые товары

🛒 Кабинет селлера

URL: /seller-supplies/

Вкладки:

  • my-goods - мои товарные поставки
  • my-consumables - мои расходники
  • create-goods - создать поставку товаров
  • create-consumables - заказать расходники

🛍️ Кабинет маркетплейсов

URL: /marketplace-supplies/

Вкладки:

  • ozon - поставки на Ozon
  • wildberries - поставки на Wildberries
  • create-ozon - создать поставку на Ozon
  • create-wildberries - создать поставку на WB

ОСОБЕННОСТИ РЕАЛИЗАЦИИ

🔄 Дополнение данных по этапам

Каждая поставка - это одна запись, которая дополняется участниками:

// Создание (селлер/ФФ)
supply = {
  id: "...",
  status: "PENDING",
  sellerId: "...",        // кто создал
  requestedDate: "...",   // когда нужно
  items: [...]           // что заказано
}

// Одобрение (поставщик)
supply = {
  ...supply,
  status: "SUPPLIER_APPROVED",
  supplierId: "...",      // кто одобрил
  approvedAt: "...",      // когда одобрил
  packagesCount: 5,       // уточненные параметры
  estimatedVolume: 2.5
}

// Назначение логистики (ФФ)
supply = {
  ...supply, 
  status: "LOGISTICS_CONFIRMED",
  logisticsPartnerId: "...",  // кто повезет
  routeId: "...",             // маршрут
  logisticsCost: 1500         // стоимость
}

🔐 Фильтрация по безопасности

Каждый resolver применяет фильтрацию по роли:

// Пример: поставки расходников ФФ
const supplies = await prisma.fulfillmentConsumableSupplyOrder.findMany({
  where: {
    // Только свои поставки для ФФ
    fulfillmentCenterId: user.organizationId  
  }
})

// Фильтрация полей по роли
return supplies.map(supply => 
  SupplyDataFilter.filterByRole(supply, user.organizationType)
)

📈 Масштабируемость

Новые типы поставок добавляются независимо:

// Будущее: Поставки на Яндекс.Маркет
interface YandexMarketSupplyOrder {
  // специфичные поля для Яндекс.Маркета
}

// Отдельные операции
createYandexMarketSupply()
myYandexMarketSupplies()

ПРЕИМУЩЕСТВА НОВОЙ АРХИТЕКТУРЫ

🎯 Четкое разделение ответственности

  • Каждый тип поставки имеет свою логику
  • Независимая разработка и тестирование
  • Простота добавления новых типов

🔒 Надежная безопасность

  • Раздельные правила доступа для каждого типа
  • Невозможно случайно показать чужие данные
  • Гранулярные права по ролям

📈 Масштабируемость

  • Легко добавлять новые маркетплейсы
  • Независимые схемы для разных процессов
  • Оптимизация каждого типа отдельно

🛡️ Безопасная миграция

  • Поэтапное внедрение без остановки системы
  • Система откатов на каждом этапе
  • Сохранение работоспособности старой системы

🚀 ПЛАН ВНЕДРЕНИЯ

Phase 1: V2-поставки расходников фулфилмента 🔄 В РАЗРАБОТКЕ

Workflow: ФФ заказывает расходники у поставщика

  • Модель данных FulfillmentConsumableSupplyOrder
  • GraphQL операции (queries + mutations)
  • Backend resolvers для всех ролей
  • Интеграция в кабинет фулфилмента (создание)
  • Интеграция в кабинет поставщика (обработка)
  • Интеграция в кабинет логистики (подтверждение)
  • Исправление критических багов workflow
  • 🔄 Финальное тестирование и доработки

Phase 2: V2-поставки расходников селлеров ПЛАНИРУЕТСЯ

Workflow: Селлер заказывает "расходники селлера" у поставщика для хранения на ФФ

  • Модель SellerConsumableSupplyOrder
  • Интеграция с системой хранения на ФФ
  • Права доступа селлера к своим расходникам

Phase 3: V2-поставки товаров ПЛАНИРУЕТСЯ

Workflow: Селлер заказывает товары у поставщика

  • Модель GoodsSupplyOrder
  • Самый сложный тип с рецептурами
  • Миграция существующих товарных поставок

Phase 4: V2-поставки на маркетплейсы ПЛАНИРУЕТСЯ

Workflow: ФФ отгружает товары на маркетплейсы

  • Модели OzonSupplyOrder, WildberriesSupplyOrder
  • API интеграции с маркетплейсами

Phase 5: Очистка и оптимизация ПЛАНИРУЕТСЯ

  • Миграция старых данных V1 → V2
  • Удаление устаревшего кода (с одобрения)
  • Финальная оптимизация системы

Текущий этап: Завершение Phase 1 - V2-поставки расходников фулфилмента