docs: обновить FULFILLMENT_DOMAIN.md с правилами V2 системы синхронизации

- Добавить архитектуру синхронизации компонентов V2
- Документировать единый источник данных fulfillmentConsumableInventory
- Описать ключевые поля для связи данных (productId)
- Добавить правила группировки и фильтрации
- Документировать компоненты статистики Master-Detail

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-08-27 12:29:37 +03:00
parent 121a4dece1
commit 0f52d8da8b

View File

@ -44,9 +44,14 @@ graph TD
D --> H[Доставляют товары к ФФ] D --> H[Доставляют товары к ФФ]
``` ```
## 📦 УПРАВЛЕНИЕ РАСХОДНИКАМИ (ДВОЙНАЯ СИСТЕМА) ## 📦 УПРАВЛЕНИЕ РАСХОДНИКАМИ (ДВОЙНАЯ СИСТЕМА V2)
### FULFILLMENT_CONSUMABLES (Собственные расходники) > **ВАЖНО:** Система полностью переведена на V2 архитектуру с улучшенной синхронизацией данных
### FULFILLMENT_CONSUMABLES (Собственные расходники) - V2 СИСТЕМА
**Таблица БД:** `fulfillmentConsumableInventory`
**GraphQL Query:** `GET_MY_FULFILLMENT_SUPPLIES`
```typescript ```typescript
interface FulfillmentConsumables { 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 ПОСТАВОК ДЛЯ ФУЛФИЛМЕНТА ## 🔄 WORKFLOW ПОСТАВОК ДЛЯ ФУЛФИЛМЕНТА
### РОЛЬ В 8-СТАТУСНОЙ СИСТЕМЕ: ### РОЛЬ В 8-СТАТУСНОЙ СИСТЕМЕ: