# ПРАВИЛА КАБИНЕТА ФУЛФИЛМЕНТА

> 📋 **Файл создан на основе анализа системы** - детальные правила для кабинета фулфилмента

---

## 📑 ОГЛАВЛЕНИЕ

1. [🏭 Общие характеристики кабинета фулфилмента](#1--общие-характеристики-кабинета-фулфилмента)
2. [🗂️ Основные разделы кабинета](#2--основные-разделы-кабинета)
3. [🔒 Правила доступа фулфилмента](#3--правила-доступа-фулфилмента)
4. [📋 Критические правила для rules2.md](#4--критические-правила-для-rules2md)

---

## 1. 🏭 ОБЩИЕ ХАРАКТЕРИСТИКИ КАБИНЕТА ФУЛФИЛМЕНТА

### 1.1 Принципы доступа

- **МАКСИМАЛЬНЫЕ ПРАВА**: Фулфилмент имеет доступ ко ВСЕМ разделам системы
- **АДАПТИВНАЯ НАВИГАЦИЯ**: Sidebar изменяется в зависимости от `user.organization.type === "FULFILLMENT"`
- **ЭКСКЛЮЗИВНЫЕ КОМПОНЕНТЫ**: Услуги, Сотрудники, Статистика фулфилмента доступны ТОЛЬКО фулфилменту
- **СПЕЦИАЛЬНЫЙ РОУТИНГ**: При нажатии "Поставки" → `/fulfillment-supplies` (не `/supplies`)

### 1.2 Архитектурные особенности

- **GraphQL проверки**: `skip: user?.organization?.type !== 'FULFILLMENT'` в запросах
- **Условное отображение**: `{user?.organization?.type === "FULFILLMENT" && (...)}`
- **Адаптивные отступы**: `getSidebarMargin()` для responsive design
- **Полинг данных**: Статистика обновляется каждую минуту (`pollInterval: 60000`)

---

## 2. 🗂️ ОСНОВНЫЕ РАЗДЕЛЫ КАБИНЕТА

### 2.1 🏠 Главная страница (`/dashboard`)

**Компонент**: `DashboardHome`
**Содержание**:

- Основная информация организации
- Статус онлайн пользователя
- Быстрый доступ к основным разделам

---

### 2.2 🏭 Склад фулфилмента (`/fulfillment-warehouse`)

**Компонент**: `FulfillmentWarehouseDashboard`

#### 2.2.1 Структура склада по модулям (ОБЯЗАТЕЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ)

1. **📦 ПРОДУКТЫ** - готовые к отправке товары
2. **🛒 ТОВАРЫ** - базовые товары от поставщиков
   - **"На складе"** - готовы к обработке
   - **"В обработке"** - в процессе создания продукта
3. **❌ БРАК** - товары с дефектами, требуют утилизации
4. **↩️ ВОЗВРАТЫ С ПВЗ** - возвращенные товары, к обработке
5. **🎯 РАСХОДНИКИ СЕЛЛЕРОВ** - материалы для селлеров
6. **⚙️ РАСХОДНИКИ ФУЛФИЛМЕНТА** - операционные материалы (КЛИКАБЕЛЬНЫЙ модуль)

#### 2.2.2 Система учета склада

**Дополнительные значения** (показатели движения):

- **ПРИБЫЛО** - количество поступивших на склад за период
- **УБЫЛО** - количество списанных со склада за период

**Основные значения** (текущие остатки):

- **ФОРМУЛА**: Основные значения = Предыдущие остатки + Прибыло - Убыло
- **ОБНОВЛЕНИЕ**: В реальном времени с изменениями за сутки
- **ИСТОЧНИК**: GraphQL query `GET_FULFILLMENT_WAREHOUSE_STATS`

#### 2.2.3 Структура данных склада (3-уровневая иерархия)

```
🔵 УРОВЕНЬ 1: МАГАЗИНЫ
├── ТехноМир (синий - blue-400/500)
├── Стиль и Комфорт (розовый - pink-400/500)
└── Зелёный Дом (изумрудный - emerald-400/500)
    ↓
🟢 УРОВЕНЬ 2: ТОВАРЫ (зеленый - green-500)
    ↓
🟠 УРОВЕНЬ 3: ВАРИАНТЫ ТОВАРОВ (оранжевый - orange-500)
```

**Цветовое кодирование**:

- Каждый уровень имеет цветной индикатор увеличивающегося размера
- Цветная левая граница с увеличивающимся отступом и толщиной
- Скроллбары в цвете уровня
- Контрастный цвет текста для читаемости

#### 2.2.4 Статистика склада

**6 основных карточек статистики**:

1. **Продукты** - готовые к отправке
2. **Товары** - в обработке
3. **Брак** - требует утилизации
4. **Возвраты с ПВЗ** - к обработке
5. **Расходники селлеров** - материалы клиентов
6. **Расходники фулфилмента** - операционные материалы

---

### 2.3 📦 Поставки фулфилмента (`/fulfillment-supplies`)

**Компонент**: `SuppliesDashboard`

#### 2.3.1 Структура: 2 основные вкладки

**A) 🛒 ПОСТАВКИ ТОВАРОВ**:

- **Детализированные товары ФФ** - планы и факты поставок с маршрутами
- **Товары ФФ** - общие поставки товаров от селлеров
- **Возвраты с ПВЗ** - обработка возвращенных товаров

**B) 🔧 ПОСТАВКИ РАСХОДНИКОВ**:

- **Заказы расходников** - управление заказами от селлеров
- **Расходники селлеров** - материалы для клиентов
- **Создание поставок** - формирование новых поставок расходников

#### 2.3.2 Workflow поставок товаров

**Этапы обработки**:

1. **Planned** - поставка запланирована
2. **In-transit** - товар в пути
3. **Delivered** - доставлен на склад
4. **Completed** - обработка завершена

**Данные поставки**:

- Номер поставки (ФФ-YYYY-XXX)
- Селлер (организация, магазин, менеджер)
- Количество позиций и грузовых мест
- Объем и стоимость поставки
- Ответственный сотрудник и логистика

---

### 2.4 📊 Статистика фулфилмента (`/fulfillment-statistics`)

**Компонент**: `FulfillmentStatisticsDashboard`

#### 2.4.1 Блоки аналитики (сворачиваемые)

**1. НАКОПЛЕННАЯ СТАТИСТИКА** (`allTime: true`):

- Обработано товаров (общий объем)
- Выявлено брака (всего единиц)
- Поставок получено
- Общий доход (за все время)
- Выполнено заказов (успешных отгрузок)
- Удовлетворенность клиентов (средний рейтинг)

**2. ОТГРУЗКА НА ПЛОЩАДКИ** (`marketplaces: true`):

- Отправлено на Wildberries
- Отправлено на Ozon
- Отправлено на другие площадки

**3. АНАЛИТИКА ПРОИЗВОДИТЕЛЬНОСТИ** (`performance: false`):

- Среднее время обработки (на единицу товара)
- Уровень брака (от общего объема)
- Уровень возвратов (возвраты с площадок)
- Удовлетворенность клиентов

**4. МЕТРИКИ СКЛАДА** (`warehouseMetrics: true`):

- Эффективность склада
- Оборачиваемость товаров
- Коэффициент использования

**5. УМНЫЕ РЕКОМЕНДАЦИИ** (`smartRecommendations: true`):

- Автоматические советы по оптимизации
- Предложения по улучшению процессов

**6. БЫСТРЫЕ ДЕЙСТВИЯ** (`quickActions: true`):

- Часто используемые операции
- Горячие клавиши для действий

#### 2.4.2 Ключевые показатели в заголовке

- **Общий доход** (зеленый - success)
- **Качество** (синий - X/5.0 рейтинг)
- **Уровень брака** (процент от общего объема)

---

### 2.5 🔧 Услуги (`/services`)

**Компонент**: `ServicesDashboard`
**Условие доступа**: `user?.organization?.type === "FULFILLMENT"`

#### 2.5.1 Структура: 3 обязательные вкладки

**A) 🛠️ УСЛУГИ** (`defaultValue="services"`):

- **CRUD операции**: создание, редактирование, удаление услуг
- **Управление ценами** и описаниями
- **Загрузка изображений** услуг (`imageUrl`)
- **GraphQL**: `GET_MY_SERVICES`, `CREATE_SERVICE`, `UPDATE_SERVICE`, `DELETE_SERVICE`

**B) 🚚 ЛОГИСТИКА**:

- **Создание маршрутов доставки** (откуда → куда)
- **Тарификация**: цена до 1м³ и свыше 1м³
- **Группированные локации**:
  - Мой фулфилмент (название организации)
  - Рынки (предустановленные)
  - Склады Wildberries
  - Склады Ozon
- **GraphQL**: `GET_MY_LOGISTICS`, `CREATE_LOGISTICS`, `UPDATE_LOGISTICS`, `DELETE_LOGISTICS`

**C) 📦 РАСХОДНИКИ**:

- **Управление расходниками фулфилмента**
- **Интеграция с модулем "Услуги"** - селлеры могут использовать в услугах
- **Списание со складских остатков** при использовании
- **Стоимость включается** в стоимость услуги

#### 2.5.2 Правила логистики

**Создание маршрута**:

- **Обязательные поля**: Название маршрута, Откуда, Куда
- **Ценообразование**: Цена до 1м³, Цена свыше 1м³
- **Описание услуг**: Дополнительные условия доставки
- **Проверка**: Только организации типа FULFILLMENT могут создавать логистику

---

### 2.6 👥 Сотрудники (`/employees`)

**Компонент**: `EmployeesDashboard`
**Условие доступа**: `user?.organization?.type === "FULFILLMENT"`

#### 2.6.1 Структура: 2 основные вкладки

**A) 👥 СОТРУДНИКИ** (`defaultValue="combined"`):

**Управление персоналом**:

- **CRUD операции**: создание, редактирование, удаление сотрудников
- **Статусы сотрудников**: `ACTIVE`, `VACATION`, `SICK`, `FIRED`
- **Формы добавления**: Компактная (`showCompactForm`) / Полная форма
- **Поиск и фильтрация** по имени, должности, статусу

**Табель рабочего времени**:

- **Навигация по месяцам**: текущий год/месяц с кнопками ←/→
- **Отметки по дням**: статус дня и количество отработанных часов
- **GraphQL**: `GET_EMPLOYEE_SCHEDULE`, `UPDATE_EMPLOYEE_SCHEDULE`
- **Данные**: `{date, hoursWorked, employee: {id}}`

**B) 📋 ОТЧЕТЫ** (`value="reports"`):

- **Сводные отчеты** по сотрудникам за период
- **Экспорт данных** табеля
- **Аналитика рабочего времени**

#### 2.6.2 Интерфейс сотрудников

**Обязательные поля сотрудника**:

```typescript
interface Employee {
  firstName: string; // Имя
  lastName: string; // Фамилия
  middleName?: string; // Отчество
  position: string; // Должность
  phone: string; // Телефон
  email?: string; // Email
  status: "ACTIVE" | "VACATION" | "SICK" | "FIRED";
  salary?: number; // Зарплата
  hireDate: string; // Дата найма
  // ... дополнительные поля
}
```

**Валидация данных**:

- Имя/Фамилия: минимум 2 символа, только буквы/пробелы/дефисы
- Телефон: обязательный, формат +7 (999) 123-45-67
- Email: валидация формата при заполнении
- Должность: минимум 2 символа

---

### 2.7 🌐 Универсальные разделы

#### 2.7.1 🛒 Маркет (`/market`)

- Просмотр товаров всех поставщиков
- Создание заказов у поставщиков
- Управление корзиной и избранным

#### 2.7.2 🤝 Партнеры (`/partners`)

- Управление контрагентами всех типов
- Входящие/исходящие заявки на сотрудничество

#### 2.7.3 💬 Мессенджер (`/messenger`)

- Внутренняя связь между организациями
- Поддержка файлов, изображений, голосовых сообщений

#### 2.7.4 ⚙️ Настройки (`/settings`)

- Профиль организации и пользователя
- API ключи маркетплейсов (WB, Ozon)
- Банковские реквизиты

---

## 3. 🔒 ПРАВИЛА ДОСТУПА ФУЛФИЛМЕНТА

### 3.1 Эксклюзивный доступ (только фулфилмент)

**TypeScript проверки**:

```typescript
{user?.organization?.type === "FULFILLMENT" && (
  // Компоненты доступны только фулфилменту
)}
```

**Эксклюзивные разделы**:

- **Услуги** (`/services`) - создание услуг, логистики, управление расходниками
- **Сотрудники** (`/employees`) - управление персоналом и табелем
- **Статистика фулфилмента** (`/fulfillment-statistics`) - детальная аналитика

### 3.2 Специальная логика роутинга

**При нажатии "Поставки" в sidebar**:

```typescript
const handleSuppliesClick = () => {
  switch (user?.organization?.type) {
    case "FULFILLMENT":
      router.push("/fulfillment-supplies"); // Специальный роут
      break;
    case "SELLER":
      router.push("/supplies");
      break;
    // ... другие типы
  }
};
```

### 3.3 GraphQL проверки доступа

**В Apollo Client запросах**:

```typescript
const { data } = useQuery(GET_MY_SERVICES, {
  skip: user?.organization?.type !== "FULFILLMENT", // Пропуск для не-фулфилмента
});
```

**В GraphQL резолверах**:

```typescript
// Проверка типа организации на сервере
if (currentUser.organization.type !== "FULFILLMENT") {
  throw new GraphQLError("Доступно только для фулфилмент центров");
}
```

---

## 4. 📋 КРИТИЧЕСКИЕ ПРАВИЛА ДЛЯ RULES2.MD

### 4.1 🔴 КРИТИЧЕСКИЕ ПРАВИЛА (обязательны к добавлению)

#### **ПРАВИЛО FF-01: Структура склада фулфилмента**

- **ОБЯЗАТЕЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ** модулей: ПРОДУКТ→ТОВАР→БРАК→ВОЗВРАТЫ→РАСХОДНИКИ*СЕЛЛЕРОВ→РАСХОДНИКИ*ФУЛФИЛМЕНТА
- **ЗАПРЕЩЕНО**: Изменение порядка модулей
- **ОБЯЗАТЕЛЬНО**: Модуль "Расходники фулфилмента" должен быть кликабельным

#### **ПРАВИЛО FF-02: Права доступа фулфилмента**

- **ЭКСКЛЮЗИВНЫЙ ДОСТУП**: Услуги, Сотрудники, Статистика фулфилмента
- **ПРОВЕРКА**: `user?.organization?.type === "FULFILLMENT"`
- **GraphQL**: `skip: user?.organization?.type !== 'FULFILLMENT'`

#### **ПРАВИЛО FF-03: Система учета склада**

- **ДВОЙНОЙ УЧЕТ**: Основные значения + дополнительные значения
- **ФОРМУЛА**: Основные = Предыдущие остатки + Прибыло - Убыло
- **ОБНОВЛЕНИЕ**: Статистика в реальном времени с изменениями за сутки

#### **ПРАВИЛО FF-04: Workflow создания продукта**

- **ПРОЦЕСС**: Товары "на складе" → "в обработке" → ПРОДУКТ "готов к отправке"
- **ПЛАН/ФАКТ**: Корректировка статистики при выявлении расхождений
- **ОБЯЗАТЕЛЬНО**: Фиксация брака в процессе работы (вкладка "В работе")

### 4.2 🟡 ВАЖНЫЕ ПРАВИЛА (рекомендуются к добавлению)

#### **ПРАВИЛО FF-05: Модуль услуг фулфилмента**

- **СТРУКТУРА**: 3 обязательные вкладки (Услуги, Логистика, Расходники)
- **ЛОГИСТИКА**: Создание маршрутов только фулфилментом
- **РАСХОДНИКИ**: Интеграция с модулем "Услуги", списание со склада

#### **ПРАВИЛО FF-06: Управление сотрудниками**

- **СТАТУСЫ**: 4 обязательных статуса (ACTIVE, VACATION, SICK, FIRED)
- **ТАБЕЛЬ**: Месячная навигация с отметками по дням
- **ВАЛИДАЦИЯ**: Строгие правила валидации полей сотрудника

#### **ПРАВИЛО FF-07: Специальный роутинг**

- **ПОСТАВКИ**: Фулфилмент → `/fulfillment-supplies` (не `/supplies`)
- **УСЛОВНОЕ ОТОБРАЖЕНИЕ**: Разные компоненты для разных типов организаций

### 4.3 🟢 ПОЛЕЗНЫЕ ПРАВИЛА (опциональны)

#### **ПРАВИЛО FF-08: UI/UX паттерны фулфилмента**

- **ЦВЕТОВАЯ СХЕМА**: 3-уровневая иерархия с цветовым кодированием
- **СВОРАЧИВАЕМЫЕ БЛОКИ**: Статистика с состояниями `expandedSections`
- **АДАПТИВНОСТЬ**: `getSidebarMargin()` для responsive design

#### **ПРАВИЛО FF-09: Статистика и аналитика**

- **6 ОСНОВНЫХ БЛОКОВ**: Накопленная, Площадки, Производительность, Склад, Рекомендации, Действия
- **REAL-TIME**: Обновление каждую минуту (`pollInterval: 60000`)
- **КЛЮЧЕВЫЕ ПОКАЗАТЕЛИ**: Доход, Качество, Уровень брака в заголовке

---

## 📎 ПРИЛОЖЕНИЯ

### Приложение A: GraphQL запросы фулфилмента

```typescript
// Основные запросы
GET_MY_SERVICES; // Услуги фулфилмента
GET_MY_LOGISTICS; // Логистические маршруты
GET_MY_EMPLOYEES; // Сотрудники организации
GET_FULFILLMENT_WAREHOUSE_STATS; // Статистика склада
GET_WAREHOUSE_PRODUCTS; // Товары на складе
GET_MY_FULFILLMENT_SUPPLIES; // Расходники фулфилмента

// Мутации
CREATE_SERVICE, UPDATE_SERVICE, DELETE_SERVICE;
CREATE_LOGISTICS, UPDATE_LOGISTICS, DELETE_LOGISTICS;
CREATE_EMPLOYEE, UPDATE_EMPLOYEE, DELETE_EMPLOYEE;
```

### Приложение B: Компоненты фулфилмента

```typescript
// Основные dashboard компоненты
FulfillmentWarehouseDashboard; // Склад фулфилмента
FulfillmentStatisticsDashboard; // Статистика
ServicesDashboard; // Услуги (3 вкладки)
EmployeesDashboard; // Сотрудники
SuppliesDashboard; // Поставки фулфилмента

// Специализированные компоненты
ServicesTab, LogisticsTab, SuppliesTab; // Вкладки услуг
EmployeeInlineForm, EmployeeEditInlineForm; // Формы сотрудников
FulfillmentSuppliesTab, FulfillmentConsumablesOrdersTab; // Поставки
```

---

**📅 Создано**: На основе анализа системы Sfera  
**🎯 Статус**: Готово к интеграции в rules2.md  
**📝 Версия**: 1.0
