# ПРАВИЛА КАБИНЕТА ФУЛФИЛМЕНТА > 📋 **Файл создан на основе анализа системы** - детальные правила для кабинета фулфилмента --- ## 📑 ОГЛАВЛЕНИЕ 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