diff --git a/docs/organization-types/FULFILLMENT_DOMAIN.md b/docs/organization-types/FULFILLMENT_DOMAIN.md index 35b5583..bc7c228 100644 --- a/docs/organization-types/FULFILLMENT_DOMAIN.md +++ b/docs/organization-types/FULFILLMENT_DOMAIN.md @@ -44,9 +44,14 @@ graph TD D --> H[Доставляют товары к ФФ] ``` -## 📦 УПРАВЛЕНИЕ РАСХОДНИКАМИ (ДВОЙНАЯ СИСТЕМА) +## 📦 УПРАВЛЕНИЕ РАСХОДНИКАМИ (ДВОЙНАЯ СИСТЕМА V2) -### FULFILLMENT_CONSUMABLES (Собственные расходники) +> **ВАЖНО:** Система полностью переведена на V2 архитектуру с улучшенной синхронизацией данных + +### FULFILLMENT_CONSUMABLES (Собственные расходники) - V2 СИСТЕМА + +**Таблица БД:** `fulfillmentConsumableInventory` +**GraphQL Query:** `GET_MY_FULFILLMENT_SUPPLIES` ```typescript interface FulfillmentConsumables { @@ -111,6 +116,114 @@ query GetSellerSuppliesOnWarehouse { } ``` +--- + +## 🚀 **V2 СИСТЕМА УПРАВЛЕНИЯ ДАННЫМИ** + +### **АРХИТЕКТУРА СИНХРОНИЗАЦИИ КОМПОНЕНТОВ** + +#### **1. ЕДИНЫЙ ИСТОЧНИК ДАННЫХ** + +```typescript +// Все компоненты фулфилмента используют одну таблицу БД +const dataSource = 'fulfillmentConsumableInventory' + +// Связанные компоненты: +const components = [ + '/fulfillment-warehouse', // Главный dashboard (карточка "РАСХОДНИКИ ФУЛФИЛМЕНТА") + '/fulfillment-warehouse/supplies', // Подраздел (карточка "ОСТАТОК" + таблица) + '/services', // Раздел услуг (вкладка "Расходники") +] +``` + +#### **2. ОБЯЗАТЕЛЬНЫЕ ПРАВИЛА СИНХРОНИЗАЦИИ** + +**GraphQL Queries - одинаковые настройки:** + +```typescript +// ✅ ПРАВИЛЬНО - для всех связанных компонентов +useQuery(FULFILLMENT_SUPPLIES_QUERY, { + fetchPolicy: 'cache-and-network', // Всегда актуальные данные + pollInterval: 30000, // Обновление каждые 30 сек + errorPolicy: 'all', // Показывать частичные данные при ошибках +}) + +// ❌ НЕПРАВИЛЬНО - разные настройки создают рассинхронизацию +useQuery(QUERY_A, { fetchPolicy: 'cache-and-network' }) // компонент A +useQuery(QUERY_B, {}) // компонент B (default cache-first) +``` + +#### **3. КЛЮЧЕВЫЕ ПОЛЯ ДЛЯ СВЯЗИ ДАННЫХ** + +```typescript +interface FulfillmentConsumableV2 { + id: string // Уникальный ID записи инвентаря + productId: string // ← ОБЯЗАТЕЛЬНО! Для фильтрации истории поставок + fulfillmentCenterId: string // Привязка к конкретному ФФ + currentStock: number // Текущий остаток (основа для всех расчётов) + totalReceived: number // Общее количество поступлений + averageCost: Decimal // Средняя стоимость для расчёта общей стоимости +} +``` + +#### **4. ПРАВИЛА ГРУППИРОВКИ И ФИЛЬТРАЦИИ** + +**✅ ПРАВИЛЬНАЯ фильтрация истории поставок:** + +```typescript +const getSupplyHistory = (supply: Supply): Supply[] => { + // Фильтруем по стабильному productId + return allDeliveries.filter((delivery) => delivery.items?.some((item) => item.productId === supply.productId)) +} +``` + +**❌ НЕПРАВИЛЬНАЯ фильтрация:** + +```typescript +// Никогда не используйте нестабильные поля для фильтрации +return supplies.filter( + (s) => s.name === supply.name && s.category === supply.category, // ← Может дать дубли! +) +``` + +#### **5. АГРЕГАЦИЯ СТАТИСТИКИ** + +**Master-Detail консистентность:** + +```typescript +// Главный dashboard - карточка "РАСХОДНИКИ ФУЛФИЛМЕНТА" +const masterValue = warehouseStats.fulfillmentSupplies.current + +// Подраздел - карточка "ОСТАТОК" +const detailValue = supplies.reduce((sum, s) => sum + s.currentStock, 0) + +// ОБЯЗАТЕЛЬНО: masterValue === detailValue +``` + +#### **6. КОМПОНЕНТЫ СТАТИСТИКИ** + +**Структура карточек статистики:** + +```typescript +// Главный раздел (/fulfillment-warehouse) +interface WarehouseStatsCards { + 'РАСХОДНИКИ ФУЛФИЛМЕНТА': number // Общий остаток всех расходников ФФ + // ... другие карточки +} + +// Подраздел (/fulfillment-warehouse/supplies) +interface SuppliesStatsCards { + 'ВСЕГО ПОЗИЦИЙ': number // Количество уникальных товаров + ДОСТУПНО: number // Товары в наличии (currentStock > 0) + ОСТАТОК: number // ← Сумма всех currentStock (= карточке выше) + 'НЕТ В НАЛИЧИИ': number // Товары с нулевыми остатками + 'ОБЩАЯ СТОИМОСТЬ': string // Стоимость всех товаров на складе + 'В ПУТИ': number // Товары со статусом в транспортировке +} +``` + +--- + ## 🔄 WORKFLOW ПОСТАВОК ДЛЯ ФУЛФИЛМЕНТА ### РОЛЬ В 8-СТАТУСНОЙ СИСТЕМЕ: