
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
15 KiB
🚚 WORKFLOW ЦЕПОЧКИ ПОСТАВОК SFERA v2.0
⚠️ ВАЖНО: Этот документ описывает НОВУЮ архитектуру системы поставок с разделением на отдельные типы. Для старой системы см. SUPPLY_CHAIN_WORKFLOW.md
🎯 ОБЗОР НОВОЙ СИСТЕМЫ
Система поставок SFERA v2.0 включает 5 типов поставок, разделенных на две категории:
📦 ПОСТАВКИ НА ФУЛФИЛМЕНТ
GoodsSupplyOrder
- товары селлера → склад ФФFulfillmentConsumableSupplyOrder
- расходники ФФ → склад ФФSellerConsumableSupplyOrder
- расходники селлера → склад ФФ
🛒 ПОСТАВКИ НА МАРКЕТПЛЕЙСЫ
OzonSupplyOrder
- готовые продукты → OzonWildberriesSupplyOrder
- готовые продукты → 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
- поставки на Ozonwildberries
- поставки на Wildberriescreate-ozon
- создать поставку на Ozoncreate-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-поставки расходников фулфилмента