Files
sfera/fulfillment-cabinet-rules.md

483 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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