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