Реализация реферальной системы и улучшение системы авторизации
- Добавлена полная реферальная система с GraphQL резолверами и UI компонентами - Улучшена система регистрации с поддержкой ВКонтакте и реферальных ссылок - Обновлена схема Prisma для поддержки реферальной системы - Добавлены новые файлы документации правил системы - Улучшена система партнерства и контрагентов - Обновлены компоненты авторизации для поддержки новых функций - Удален устаревший server.log 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -1,3 +1,15 @@
|
||||
# 🔒 РЕЗЕРВНАЯ КОПИЯ - НЕ РЕДАКТИРОВАТЬ БЕЗ РАЗРЕШЕНИЯ!
|
||||
|
||||
> 🚨 **КРИТИЧЕСКИ ВАЖНО**: Это РЕЗЕРВНАЯ КОПИЯ файла rules-complete.md
|
||||
>
|
||||
> ❌ **ЗАПРЕЩЕНО РЕДАКТИРОВАТЬ БЕЗ ЯВНОГО РАЗРЕШЕНИЯ ПОЛЬЗОВАТЕЛЯ!**
|
||||
>
|
||||
> 📅 **Дата создания резерва**: 2025-08-08
|
||||
> 🔐 **Статус**: ЗАЩИЩЕН ОТ ИЗМЕНЕНИЙ
|
||||
> 📄 **Оригинальный файл**: rules-complete.md
|
||||
|
||||
---
|
||||
|
||||
# ПРАВИЛА СИСТЕМЫ УПРАВЛЕНИЯ СКЛАДАМИ И ПОСТАВКАМИ - ЕДИНЫЙ ИСТОЧНИК ИСТИНЫ v10.0
|
||||
|
||||
> ⚠️ **АБСОЛЮТНО ПОЛНЫЙ ЕДИНЫЙ ИСТОЧНИК ИСТИНЫ**: Данный файл объединяет АБСОЛЮТНО ВСЕ правила системы: протоколы работы Claude Code, детальные протоколы по сложности, систему предотвращения нарушений, расширенную самопроверку, специальный UI/UX протокол и бизнес-правила. Визуальные правила вынесены в отдельный файл visual-design-rules.md с автоматической интеграцией.
|
||||
@ -113,7 +125,7 @@
|
||||
| ----------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------- |
|
||||
| **Типы предметов** | [2](#2--типизация-предметов) | PRODUCT, CONSUMABLE, DEFECT, FINISHED_PRODUCT |
|
||||
| **Кабинет фулфилмента** | [11](#11--кабинет-фулфилмента-полная-документация) | Склад, Услуги, Сотрудники, 6 модулей |
|
||||
| **Workflow поставок** | [5](#5--workflow-поставок) | 8 статусов, уведомления, роль логистики |
|
||||
| **Workflow поставок** | [5](#5--workflow-поставок) | 8 статусов, уведомления, логистика |
|
||||
| **GraphQL запросы** | [18](#18--graphql-и-typescript-правила), [24](#24--технические-приложения) | Резолверы, мутации, типизация |
|
||||
| **Система партнерства** | [13](#13--система-партнерства-и-контрагентов) | Counterparty, WHOLESALE, заявки |
|
||||
| **Рынки и маркет** | [10.1](#101-разделение-понятий-рынок-vs-маркет), [18.7](#187-правила-рынков-и-маркета) | РЫНОК ≠ МАРКЕТ, Organization.market |
|
||||
@ -227,6 +239,8 @@ SupplyOrder представляет собой единый документ,
|
||||
|
||||
## 📑 ОГЛАВЛЕНИЕ
|
||||
|
||||
> 📖 **Каталог процессов**: См. [workflow-catalog.md](./workflow-catalog.md) для полного каталога всех бизнес-процессов системы
|
||||
|
||||
> 📋 **ЧТО ОБЪЕДИНЕНО**:
|
||||
>
|
||||
> - rules-unified.md (v3.0) - общая база знаний системы
|
||||
@ -508,45 +522,7 @@ if (currentUser.organization.type !== 'FULFILLMENT') {
|
||||
|
||||
> 📌 **ВИЗУАЛЬНЫЕ ПРАВИЛА**: См. [visual-design-rules.md - Статусы поставок](#142-статусы-поставок---расширенная-цветовая-система)
|
||||
|
||||
### 5.1 Детализированная система статусов
|
||||
|
||||
**Статусы SupplyOrder (Заказ поставки):**
|
||||
|
||||
1. **PENDING** - Ожидает подтверждения поставщиком
|
||||
2. **SUPPLIER_APPROVED** - Одобрено поставщиком
|
||||
3. **CONFIRMED** - Подтвержден (готов к обработке)
|
||||
4. **LOGISTICS_CONFIRMED** - Подтверждено логистикой
|
||||
5. **SHIPPED** - Отгружено поставщиком
|
||||
6. **IN_TRANSIT** - В пути (логистика доставляет)
|
||||
7. **DELIVERED** - Доставлен на фулфилмент
|
||||
8. **CANCELLED** - Отменен
|
||||
|
||||
### 5.2 Пошаговый процесс поставки
|
||||
|
||||
**ЭТАП 1: Создание заказа**
|
||||
|
||||
1. Селлер заказывает товар/расходники у поставщика
|
||||
2. Система создает SupplyOrder со статусом `PENDING`
|
||||
3. Автоматическое уведомление поставщику
|
||||
|
||||
**ЭТАП 2: Обработка поставщиком** 4. Поставщик получает оповещение 5. Поставщик нажимает "Одобрить" 6. Статус меняется на `SUPPLIER_APPROVED`
|
||||
|
||||
**ЭТАП 3: Передача в фулфилмент** 7. Поставка отображается в кабинете фулфилмента 8. Фулфилмент выбирает ответственного и логистику 9. Статус меняется на `CONFIRMED`
|
||||
|
||||
**ЭТАП 4: Логистическое подтверждение** 10. Логистика подтверждает доставку 11. Статус меняется на `LOGISTICS_CONFIRMED`
|
||||
|
||||
**ЭТАП 5: Отгрузка** 12. Поставщик отгружает товар 13. Статус меняется на `SHIPPED`, затем `IN_TRANSIT`
|
||||
|
||||
**ЭТАП 6: Доставка и приемка** 14. Логистика доставляет на фулфилмент 15. Фулфилмент принимает товар 16. Статус меняется на `DELIVERED`
|
||||
|
||||
### 5.3 Система уведомлений
|
||||
|
||||
**Обязательные уведомления:**
|
||||
|
||||
- Поставщику: о новом заказе
|
||||
- Фулфилменту: о подтвержденной поставке
|
||||
- Логистике: о назначении на заявку
|
||||
- Селлеру: об изменении каждого статуса
|
||||
См. детальное описание в [workflow-catalog.md#1-workflow-поставок](./workflow-catalog.md#1-workflow-поставок)
|
||||
|
||||
---
|
||||
|
||||
@ -1974,351 +1950,114 @@ height: calc(100vh - headerHeight - tabsHeight - statsHeight - margins);
|
||||
|
||||
## 11. 🏭 КАБИНЕТ ФУЛФИЛМЕНТА
|
||||
|
||||
### 11.1 Общие характеристики кабинета фулфилмента
|
||||
> 📖 **Технические детали кабинета**: См. [fulfillment-cabinet-rules.md](./fulfillment-cabinet-rules.md) для компонентов, GraphQL, UI/UX и всех технических деталей реализации
|
||||
|
||||
#### 11.1.1 Принципы доступа
|
||||
### 11.1 Основные функции фулфилмента
|
||||
|
||||
- **МАКСИМАЛЬНЫЕ ПРАВА**: Фулфилмент имеет доступ ко ВСЕМ разделам системы
|
||||
- **АДАПТИВНАЯ НАВИГАЦИЯ**: Sidebar изменяется в зависимости от `user.organization.type === "FULFILLMENT"`
|
||||
- **ЭКСКЛЮЗИВНЫЕ КОМПОНЕНТЫ**: Услуги, Сотрудники, Статистика фулфилмента доступны ТОЛЬКО фулфилменту
|
||||
- **СПЕЦИАЛЬНЫЙ РОУТИНГ**: При нажатии "Поставки" → `/fulfillment-supplies` (не `/supplies`)
|
||||
**РОЛЬ В СИСТЕМЕ**: Обработка товаров и предоставление услуг
|
||||
|
||||
#### 11.1.2 Архитектурные особенности
|
||||
**ОСНОВНЫЕ ФУНКЦИИ**:
|
||||
|
||||
- **GraphQL проверки**: `skip: user?.organization?.type !== 'FULFILLMENT'` в запросах
|
||||
- **Условное отображение**: `{user?.organization?.type === "FULFILLMENT" && (...)}`
|
||||
- **Адаптивные отступы**: `getSidebarMargin()` для responsive design
|
||||
- **Полинг данных**: Статистика обновляется каждую минуту (`pollInterval: 60000`)
|
||||
- **ПРИЕМКА ТОВАРОВ**: Получение и обработка поставок от поставщиков
|
||||
- **СОЗДАНИЕ ПРОДУКТОВ**: Превращение товаров в готовые продукты по рецептурам
|
||||
- **ПРЕДОСТАВЛЕНИЕ УСЛУГ**: Услуги обработки для селлеров
|
||||
- **УПРАВЛЕНИЕ РАСХОДНИКАМИ**: Установка цен и контроль наличия
|
||||
- **ЛОГИСТИЧЕСКИЕ УСЛУГИ**: Маршруты доставки и тарификация
|
||||
|
||||
### 11.2 Структура раздела склад фулфилмента
|
||||
### 11.2 Workflow фулфилмента
|
||||
|
||||
> 📌 **ВИЗУАЛЬНЫЕ ПРАВИЛА**: См. [visual-design-rules.md - Кабинет фулфилмента](#141-кабинет-фулфилмента)
|
||||
См. детальное описание в [workflow-catalog.md#4-workflow-фулфилмента](./workflow-catalog.md#4-workflow-фулфилмента)
|
||||
|
||||
#### 11.2.1 Структура склада по модулям (ОБЯЗАТЕЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ)
|
||||
### 11.3 Основные разделы кабинета
|
||||
|
||||
1. **📦 ПРОДУКТЫ** - готовые к отправке товары
|
||||
2. **🛒 ТОВАРЫ** - базовые товары от поставщиков
|
||||
- **"На складе"** - готовы к обработке
|
||||
- **"В обработке"** - в процессе создания продукта
|
||||
3. **❌ БРАК** - товары с дефектами, требуют утилизации
|
||||
4. **↩️ ВОЗВРАТЫ С ПВЗ** - возвращенные товары, к обработке
|
||||
5. **🎯 РАСХОДНИКИ СЕЛЛЕРОВ** - материалы для селлеров (тип `CONSUMABLE`, заказанные селлерами)
|
||||
6. **⚙️ РАСХОДНИКИ ФУЛФИЛМЕНТА** - операционные материалы (тип `CONSUMABLE`, заказанные фулфилментом, КЛИКАБЕЛЬНЫЙ модуль)
|
||||
**СТРУКТУРА ДОСТУПА**:
|
||||
|
||||
#### 11.2.2 Система учета склада
|
||||
- **Склад** - управление товарами по модулям
|
||||
- **Поставки** - обработка входящих товаров
|
||||
- **Услуги** - каталог услуг и расходники
|
||||
- **Сотрудники** - управление персоналом
|
||||
- **Статистика** - аналитика деятельности
|
||||
|
||||
**Дополнительные значения** (показатели движения):
|
||||
### 11.4 Правила фулфилмента
|
||||
|
||||
- **ПРИБЫЛО** - количество поступивших на склад за период
|
||||
- **УБЫЛО** - количество списанных со склада за период
|
||||
**ОБЯЗАТЕЛЬНО**:
|
||||
- Установка цен на расходники перед доступностью селлерам
|
||||
- Контроль качества товаров при приемке
|
||||
- Своевременная обработка возвратов
|
||||
- Ведение учета движения товаров
|
||||
- Управление персоналом и рабочим временем
|
||||
|
||||
**Основные значения** (текущие остатки):
|
||||
|
||||
- **ФОРМУЛА**: Основные значения = Предыдущие остатки + Прибыло - Убыло
|
||||
- **ОБНОВЛЕНИЕ**: В реальном времени с изменениями за сутки
|
||||
- **ИСТОЧНИК**: GraphQL query `GET_FULFILLMENT_WAREHOUSE_STATS`
|
||||
|
||||
#### 11.2.3 Структура данных склада (3-уровневая иерархия)
|
||||
|
||||
```
|
||||
🔵 УРОВЕНЬ 1: МАГАЗИНЫ
|
||||
├── ТехноМир (синий - blue-400/500)
|
||||
├── Стиль и Комфорт (розовый - pink-400/500)
|
||||
└── Зелёный Дом (изумрудный - emerald-400/500)
|
||||
↓
|
||||
🟢 УРОВЕНЬ 2: ТОВАРЫ (зеленый - green-500)
|
||||
↓
|
||||
🟠 УРОВЕНЬ 3: ВАРИАНТЫ ТОВАРОВ (оранжевый - orange-500)
|
||||
```
|
||||
|
||||
**Цветовое кодирование**:
|
||||
|
||||
- Каждый уровень имеет цветной индикатор увеличивающегося размера
|
||||
- Цветная левая граница с увеличивающимся отступом и толщиной
|
||||
- Скроллбары в цвете уровня
|
||||
- Контрастный цвет текста для читаемости
|
||||
|
||||
### 11.3 Движение товаров в фулфилменте
|
||||
|
||||
#### **Поступление товаров**:
|
||||
|
||||
- **ПОСТАВКИ**: От поставщиков через систему заказов
|
||||
- **ВОЗВРАТЫ**: Товары, возвращенные с ПВЗ
|
||||
- **ПЕРЕМЕЩЕНИЯ**: Между складами и магазинами
|
||||
|
||||
#### **Расход товаров**:
|
||||
|
||||
- **ОТГРУЗКА**: Товары отправлены селлерам
|
||||
- **СПИСАНИЕ**: Брак, утрата, утилизация
|
||||
- **ВОЗВРАТ**: Возврат поставщику
|
||||
- **ИСПОЛЬЗОВАНИЕ**: Расходники для операций
|
||||
|
||||
### 11.4 Модуль "Расходники фулфилмента"
|
||||
|
||||
**ОСОБЕННОСТИ**:
|
||||
|
||||
- **ИНТЕРАКТИВНОСТЬ**: Кликабельный элемент в статистике
|
||||
- **ФУНКЦИОНАЛЬНОСТЬ**: Полноценный раздел учёта
|
||||
- **СОДЕРЖАНИЕ**: Управление расходниками фулфилмента
|
||||
|
||||
### 11.5 Поставки фулфилмента (`/fulfillment-supplies`)
|
||||
|
||||
#### 11.5.1 Структура: 2 основные вкладки
|
||||
|
||||
**A) 🛒 ПОСТАВКИ ТОВАРОВ**:
|
||||
|
||||
- **Детализированные товары ФФ** - планы и факты поставок с маршрутами
|
||||
- **Товары ФФ** - общие поставки товаров от селлеров
|
||||
- **Возвраты с ПВЗ** - обработка возвращенных товаров
|
||||
|
||||
**B) 🔧 ПОСТАВКИ РАСХОДНИКОВ**:
|
||||
|
||||
- **Заказы расходников** - управление заказами от селлеров
|
||||
- **Расходники селлеров** - материалы для клиентов
|
||||
- **Создание поставок** - формирование новых поставок расходников
|
||||
|
||||
#### 11.5.2 Workflow поставок товаров
|
||||
|
||||
**Этапы обработки**:
|
||||
|
||||
1. **Planned** - поставка запланирована
|
||||
2. **In-transit** - товар в пути
|
||||
3. **Delivered** - доставлен на склад
|
||||
4. **Completed** - обработка завершена
|
||||
|
||||
### 11.6 Статистика фулфилмента (`/fulfillment-statistics`)
|
||||
|
||||
#### 11.6.1 Блоки аналитики (сворачиваемые)
|
||||
|
||||
**1. НАКОПЛЕННАЯ СТАТИСТИКА** (`allTime: true`):
|
||||
|
||||
- Обработано товаров (общий объем)
|
||||
- Выявлено брака (всего единиц)
|
||||
- Поставок получено
|
||||
- Общий доход (за все время)
|
||||
- Выполнено заказов (успешных отгрузок)
|
||||
- Удовлетворенность клиентов (средний рейтинг)
|
||||
|
||||
**2. ОТГРУЗКА НА ПЛОЩАДКИ** (`marketplaces: true`):
|
||||
|
||||
- Отправлено на Wildberries
|
||||
- Отправлено на Ozon
|
||||
- Отправлено на другие площадки
|
||||
|
||||
**3. АНАЛИТИКА ПРОИЗВОДИТЕЛЬНОСТИ** (`performance: false`):
|
||||
|
||||
- Среднее время обработки (на единицу товара)
|
||||
- Уровень брака (от общего объема)
|
||||
- Уровень возвратов (возвраты с площадок)
|
||||
- Удовлетворенность клиентов
|
||||
|
||||
### 11.7 Услуги фулфилмента (`/services`)
|
||||
|
||||
#### 11.7.1 Архитектура интеграции с системой
|
||||
|
||||
**СВЯЗЬ С РЕЦЕПТУРАМИ СЕЛЛЕРОВ:**
|
||||
|
||||
```
|
||||
СЕЛЛЕР (создание поставки)
|
||||
└── Рецептура
|
||||
├── Товар (от поставщика)
|
||||
├── Услуги фулфилмента ← CRUD в разделе Услуги
|
||||
├── Расходники селлера
|
||||
└── Расходники фулфилмента ← ТОЛЬКО с установленной ценой
|
||||
↓
|
||||
ФУЛФИЛМЕНТ (обработка)
|
||||
├── Входящие поставки → Поставки расходников (создание)
|
||||
└── Услуги → Расходники (установка цены за единицу)
|
||||
```
|
||||
|
||||
#### 11.7.2 Структура: 3 обязательные вкладки
|
||||
|
||||
**A) 🛠️ УСЛУГИ** (`defaultValue="services"`):
|
||||
|
||||
- **Полный CRUD**: создание, редактирование, удаление услуг
|
||||
- **Поля**: `name`, `description`, `price`, `imageUrl`
|
||||
- **Glass Upload Zone**: элегантная загрузка изображений
|
||||
- **Назначение**: каталог услуг для рецептур селлеров
|
||||
- **GraphQL**: `GET_MY_SERVICES`, `CREATE_SERVICE`, `UPDATE_SERVICE`, `DELETE_SERVICE`
|
||||
|
||||
**B) 🚚 ЛОГИСТИКА**:
|
||||
|
||||
- **Полный CRUD**: маршруты доставки
|
||||
- **Поля**: откуда → куда, тарификация до/свыше 1м³
|
||||
- **Группированные локации**:
|
||||
- Мой фулфилмент (название организации)
|
||||
- Рынки (предустановленные)
|
||||
- Склады Wildberries
|
||||
- Склады Ozon
|
||||
- **Glass Upload Zone**: для изображений маршрутов
|
||||
- **GraphQL**: `GET_MY_LOGISTICS`, `CREATE_LOGISTICS`, `UPDATE_LOGISTICS`, `DELETE_LOGISTICS`
|
||||
|
||||
**C) 📦 РАСХОДНИКИ** (**❌ БЕЗ СОЗДАНИЯ**):
|
||||
|
||||
- **ТОЛЬКО ПРОСМОТР** расходников с фулфилмент-склада
|
||||
- **ЕДИНСТВЕННОЕ РЕДАКТИРУЕМОЕ ПОЛЕ**: `pricePerUnit` - цена за единицу для рецептур
|
||||
- **UI подсветка**: "Цена за 1 {unit}" (например, "Цена за 1 шт")
|
||||
- **Автоматическая синхронизация** при приеме поставки расходников
|
||||
- **Glass Upload Zone**: для обновления изображений расходников
|
||||
- **GraphQL**: `GET_MY_SUPPLIES` (read-only), `UPDATE_SUPPLY_PRICE`
|
||||
|
||||
#### 11.7.3 Workflow расходников
|
||||
|
||||
**ШАГ 1 - СОЗДАНИЕ**: Только через "Входящие поставки → Поставки расходников фулфилмента"
|
||||
|
||||
**ШАГ 2 - СИНХРОНИЗАЦИЯ**: При приеме на склад → автоматически в Услуги/Расходники
|
||||
|
||||
**ШАГ 3 - ЦЕНООБРАЗОВАНИЕ**: Установка цены за единицу в разделе Услуги
|
||||
|
||||
**ШАГ 4 - ИСПОЛЬЗОВАНИЕ**: Доступны в рецептурах селлеров
|
||||
|
||||
#### 11.7.4 Правила видимости в рецептурах
|
||||
|
||||
**В РЕЦЕПТУРАХ СЕЛЛЕРОВ ПОКАЗЫВАЮТСЯ ТОЛЬКО:**
|
||||
|
||||
- `isAvailable = true` (есть на skladе)
|
||||
- `pricePerUnit != null` (цена установлена)
|
||||
|
||||
**НЕ ПОКАЗЫВАЮТСЯ:**
|
||||
|
||||
- Расходники без цены (`pricePerUnit = null`)
|
||||
- Удаленные со склада (`isAvailable = false`)
|
||||
|
||||
**В РАЗДЕЛЕ УСЛУГИ/РАСХОДНИКИ ВИДНЫ ВСЕ:**
|
||||
|
||||
- С визуальной индикацией состояния (активные/неактивные/без цены)
|
||||
|
||||
#### 11.7.5 Разделение цен закупки и продажи
|
||||
|
||||
**КРИТИЧЕСКОЕ ПРАВИЛО**: Расходники фулфилмента имеют **ДВЕ РАЗНЫЕ ЦЕНЫ** для разных бизнес-процессов:
|
||||
|
||||
1. **ЦЕНА ЗАКУПКИ** (`Supply.price`) - цена, по которой фулфилмент купил расходник у поставщика
|
||||
2. **ЦЕНА ПРОДАЖИ** (`Supply.pricePerUnit`) - цена, по которой фулфилмент продает расходник селлерам
|
||||
|
||||
**ПОЛЯ В БАЗЕ ДАННЫХ**:
|
||||
|
||||
```prisma
|
||||
model Supply {
|
||||
price Decimal @db.Decimal(10, 2) // Цена закупки у поставщика (НЕИЗМЕННАЯ)
|
||||
pricePerUnit Decimal? @db.Decimal(10, 2) // Цена продажи селлерам (устанавливается фулфилментом)
|
||||
}
|
||||
```
|
||||
|
||||
**ПРАВИЛА ОТОБРАЖЕНИЯ ПО РАЗДЕЛАМ**:
|
||||
|
||||
**РАЗДЕЛ "СКЛАД → РАСХОДНИКИ ФУЛФИЛМЕНТА"**:
|
||||
|
||||
- Показывает `Supply.price` (цена закупки)
|
||||
- Цена ТОЛЬКО ДЛЯ ЧТЕНИЯ, нельзя изменять
|
||||
- Отражает историческую стоимость приобретения
|
||||
|
||||
**РАЗДЕЛ "УСЛУГИ → РАСХОДНИКИ"**:
|
||||
|
||||
- Показывает и редактирует `Supply.pricePerUnit` (цена продажи)
|
||||
- Единственное место где можно изменить цену для селлеров
|
||||
- Влияет на рецептуры и расчеты для селлеров
|
||||
|
||||
**БИЗНЕС-ЛОГИКА СОЗДАНИЯ**:
|
||||
|
||||
ПРИ ПОСТУПЛЕНИИ ОТ ПОСТАВЩИКА:
|
||||
|
||||
```typescript
|
||||
const supply = await prisma.supply.create({
|
||||
data: {
|
||||
price: item.price, // Цена поставщика → ЗАФИКСИРОВАНА
|
||||
pricePerUnit: null, // Цена продажи → ПУСТАЯ
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
УСТАНОВКА ЦЕНЫ ПРОДАЖИ (в разделе "Услуги"):
|
||||
|
||||
```typescript
|
||||
const updated = await prisma.supply.update({
|
||||
data: {
|
||||
pricePerUnit: newPrice, // ТОЛЬКО цена продажи
|
||||
// price НЕ ТРОГАЕМ - остается цена закупки
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
#### 11.7.6 Технические требования
|
||||
|
||||
**GraphQL типы:**
|
||||
|
||||
```graphql
|
||||
# Для рецептур - только доступные с ценой
|
||||
getAvailableSuppliesForRecipe: [SupplyForRecipe!]!
|
||||
|
||||
# В разделе Услуги - все расходники
|
||||
getMySupplies: [Supply!]!
|
||||
|
||||
type Supply {
|
||||
pricePerUnit: Float # Может быть null
|
||||
unit: String! # "шт", "кг", "м"
|
||||
isAvailable: Boolean! # Статус на складе
|
||||
warehouseConsumableId: ID! # Связь со складом
|
||||
}
|
||||
```
|
||||
|
||||
**Экономический учет:**
|
||||
|
||||
- Создание: через поставки расходников
|
||||
- Ценообразование: в разделе Услуги
|
||||
- Списание: со склада при использовании
|
||||
- Стоимость = количество × цена за единицу
|
||||
|
||||
### 11.8 Сотрудники фулфилмента (`/employees`)
|
||||
|
||||
#### 11.8.1 Структура: 2 основные вкладки
|
||||
|
||||
**A) 👥 СОТРУДНИКИ** (`defaultValue="combined"`):
|
||||
|
||||
**Управление персоналом**:
|
||||
|
||||
- **CRUD операции**: создание, редактирование, удаление сотрудников
|
||||
- **Статусы сотрудников**: `ACTIVE`, `VACATION`, `SICK`, `FIRED`
|
||||
- **Формы добавления**: Компактная (`showCompactForm`) / Полная форма
|
||||
- **Поиск и фильтрация** по имени, должности, статусу
|
||||
|
||||
**Табель рабочего времени**:
|
||||
|
||||
- **Навигация по месяцам**: текущий год/месяц с кнопками ←/→
|
||||
- **Отметки по дням**: статус дня и количество отработанных часов
|
||||
- **GraphQL**: `GET_EMPLOYEE_SCHEDULE`, `UPDATE_EMPLOYEE_SCHEDULE`
|
||||
|
||||
**B) 📋 ОТЧЕТЫ** (`value="reports"`):
|
||||
|
||||
- **Сводные отчеты** по сотрудникам за период
|
||||
- **Экспорт данных** табеля
|
||||
- **Аналитика рабочего времени**
|
||||
|
||||
### 11.9 Блок детализации по магазинам
|
||||
|
||||
**НАЗНАЧЕНИЕ**: Распределение товаров по торговым точкам/магазинам
|
||||
|
||||
**ФУНКЦИИ**:
|
||||
|
||||
- **ОСТАТКИ ПО МАГАЗИНАМ**: Отображение количества товаров в каждом магазине
|
||||
- **УПРАВЛЕНИЕ РАСПРЕДЕЛЕНИЕМ**: Перемещение товаров между точками
|
||||
- **КОНТРОЛЬ ДВИЖЕНИЯ**: Отслеживание перемещений между складами и магазинами
|
||||
- **АНАЛИТИКА**: Сравнение эффективности разных точек
|
||||
- **ПЛАНИРОВАНИЕ**: Оптимизация распределения товаров
|
||||
**ЗАПРЕЩЕНО**:
|
||||
- Отгружать товары без подтверждения наличия
|
||||
- Создавать расходники минуя систему поставок
|
||||
- Изменять цены закупки после поступления товара
|
||||
- Показывать в рецептурах неактивные расходники
|
||||
|
||||
---
|
||||
|
||||
## 12. 🚚 КАБИНЕТ ЛОГИСТИКИ
|
||||
|
||||
> 📖 **Технические детали кабинета**: См. [logist-cabinet-rules.md](./logist-cabinet-rules.md) для компонентов, GraphQL, UI/UX и всех технических деталей реализации
|
||||
### 12.1 Основные функции логистики
|
||||
|
||||
**КРАТКАЯ РОЛЬ В СИСТЕМЕ**: Управление доставками и транспортировкой
|
||||
**РОЛЬ В СИСТЕМЕ**: Управление доставками и транспортировкой
|
||||
|
||||
**КЛЮЧЕВЫЕ ФУНКЦИИ**:
|
||||
**ОСНОВНЫЕ ФУНКЦИИ**:
|
||||
|
||||
- Подтверждение возможности доставки поставок
|
||||
- Организация и выполнение доставки товаров
|
||||
- Управление логистическими маршрутами
|
||||
- Мониторинг грузов в пути
|
||||
- **ПОДТВЕРЖДЕНИЕ ДОСТАВКИ**: Подтверждение возможности доставки поставок
|
||||
- **ТРАНСПОРТИРОВКА**: Организация и выполнение доставки товаров
|
||||
- **КОНТРОЛЬ МАРШРУТОВ**: Управление логистическими маршрутами
|
||||
- **ОТСЛЕЖИВАНИЕ**: Мониторинг грузов в пути
|
||||
|
||||
### 12.2 Workflow для логистики
|
||||
|
||||
См. детальное описание в [workflow-catalog.md#5-workflow-логистики](./workflow-catalog.md#5-workflow-логистики)
|
||||
|
||||
### 12.3 Система тарификации
|
||||
|
||||
**ПАРАМЕТРЫ ТАРИФИКАЦИИ**:
|
||||
|
||||
- **Тариф до 1м³** - базовая стоимость для малых грузов
|
||||
- **Тариф свыше 1м³** - стоимость для крупных грузов
|
||||
- **Маршруты доставки** - от точки отправления до точки назначения
|
||||
- **Описание услуг** - дополнительные условия доставки
|
||||
|
||||
**РАСЧЕТ СТОИМОСТИ**:
|
||||
|
||||
- Автоматический расчет стоимости доставки по объему груза
|
||||
- Отображение примерной стоимости при создании заказа
|
||||
- Учет специфики маршрута и условий доставки
|
||||
|
||||
### 12.4 Управление заявками
|
||||
|
||||
**РАЗДЕЛЫ КАБИНЕТА ЛОГИСТИКИ**:
|
||||
|
||||
- **НОВЫЕ ЗАЯВКИ** - поступившие заявки на доставку
|
||||
- **В РАБОТЕ** - принятые к исполнению заявки
|
||||
- **ВЫПОЛНЕННЫЕ** - завершенные доставки
|
||||
- **ОТКЛОНЕННЫЕ** - заявки, которые не могут быть выполнены
|
||||
|
||||
**ИНФОРМАЦИЯ О ЗАЯВКЕ**:
|
||||
|
||||
- Детали груза (объем, вес, габариты)
|
||||
- Маршрут доставки (откуда - куда)
|
||||
- Срочность доставки
|
||||
- Особые требования к транспортировке
|
||||
- Контактная информация участников
|
||||
|
||||
### 12.5 Правила логистики
|
||||
|
||||
**ОБЯЗАТЕЛЬНО**:
|
||||
|
||||
- Своевременное подтверждение заявок
|
||||
- Соблюдение сроков доставки
|
||||
- Бережная транспортировка товаров
|
||||
- Уведомление о статусе доставки
|
||||
|
||||
**ЗАПРЕЩЕНО**:
|
||||
|
||||
- Принятие заявок без подтверждения возможности выполнения
|
||||
- Нарушение сроков доставки без уведомления
|
||||
- Повреждение товаров при транспортировке
|
||||
|
||||
---
|
||||
|
||||
@ -2498,6 +2237,115 @@ const wholesalePartners = await prisma.counterparty.findMany({
|
||||
- [ ] Проверить данные в базе через Prisma Studio
|
||||
- [ ] Использовать `fetchPolicy: 'network-only'` для обхода кеша
|
||||
|
||||
### 13.6 Различие партнерских и реферальных ссылок
|
||||
|
||||
⚠️ **КРИТИЧЕСКИ ВАЖНО**: НЕ ПУТАТЬ два различных типа ссылок в системе!
|
||||
|
||||
#### **13.6.1 Партнерские ссылки**
|
||||
|
||||
**НАЗНАЧЕНИЕ**: Бизнес-партнерство с автоматическим добавлением в контрагенты
|
||||
|
||||
**ФОРМАТ URL**: `?partner=REFERRAL_CODE`
|
||||
```
|
||||
http://localhost:3000/register?partner=SF2X9K4M7P
|
||||
```
|
||||
|
||||
**ЧТО ПРОИСХОДИТ**:
|
||||
1. ✅ Начисляется 100 сфер (⚡) реферальная награда
|
||||
2. ✅ **Автоматически создается партнерство**: взаимное добавление в контрагенты
|
||||
3. ✅ Устанавливается реферальная связь (`referredById`)
|
||||
4. ✅ Создаются записи в таблице `Counterparty` (двусторонние)
|
||||
5. ✅ Организации видят друг друга в разделе "Партнеры"
|
||||
|
||||
**ИСПОЛЬЗОВАНИЕ**: Когда нужно сразу стать деловыми партнерами и начать работать
|
||||
|
||||
#### **13.6.2 Реферальные ссылки**
|
||||
|
||||
**НАЗНАЧЕНИЕ**: Маркетинговое привлечение с наградой, БЕЗ автоматического партнерства
|
||||
|
||||
**ФОРМАТ URL**: `?ref=REFERRAL_CODE`
|
||||
```
|
||||
http://localhost:3000/register?ref=SF2X9K4M7P
|
||||
```
|
||||
|
||||
**ЧТО ПРОИСХОДИТ**:
|
||||
1. ✅ Начисляется 100 сфер (⚡) реферальная награда
|
||||
2. ✅ Устанавливается реферальная связь (`referredById`)
|
||||
3. ❌ **НЕ создается партнерство**: организации НЕ добавляются в контрагенты
|
||||
4. ❌ Организации НЕ видят друг друга в разделе "Партнеры"
|
||||
|
||||
**ИСПОЛЬЗОВАНИЕ**: Маркетинговые кампании, блогеры, инфлюенсеры
|
||||
|
||||
#### **13.6.3 Технические различия в коде**
|
||||
|
||||
**В резолверах регистрации**:
|
||||
|
||||
```typescript
|
||||
// Обработка партнерского кода (создает партнерство)
|
||||
if (partnerCode) {
|
||||
// 1. Найти организацию-партнера
|
||||
// 2. Создать реферальную транзакцию
|
||||
// 3. Установить реферальную связь
|
||||
// 4. СОЗДАТЬ ВЗАИМНОЕ ПАРТНЕРСТВО ← Ключевое отличие!
|
||||
}
|
||||
|
||||
// Обработка реферального кода (только награда)
|
||||
if (referralCode) {
|
||||
// 1. Найти организацию-реферера
|
||||
// 2. Создать реферальную транзакцию
|
||||
// 3. Установить реферальную связь
|
||||
// 4. БЕЗ создания партнерства ← Ключевое отличие!
|
||||
}
|
||||
```
|
||||
|
||||
#### **13.6.4 UI различия**
|
||||
|
||||
**В разделе "Партнеры"**:
|
||||
|
||||
**Вкладка "Мои партнеры"**:
|
||||
- Партнерская ссылка: `?partner=CODE` (автоматическое партнерство)
|
||||
- Заголовок: "Пригласить партнера"
|
||||
- Описание: "Для прямого делового сотрудничества"
|
||||
|
||||
**Вкладка "Рефералы"**:
|
||||
- Реферальная ссылка: `?ref=CODE` (только маркетинг)
|
||||
- Заголовок: "Реферальная ссылка"
|
||||
- Описание: "Для маркетинговых кампаний"
|
||||
|
||||
#### **13.6.5 Правила именования**
|
||||
|
||||
**В коде ВСЕГДА использовать**:
|
||||
- `partnerCode` / `partner=` → бизнес-партнерство
|
||||
- `referralCode` / `ref=` → маркетинговое привлечение
|
||||
|
||||
**В комментариях и документации**:
|
||||
- "Партнерская ссылка" → автоматическое партнерство
|
||||
- "Реферальная ссылка" → только маркетинг
|
||||
|
||||
**ЗАПРЕЩЕНО**:
|
||||
- ❌ Называть партнерские ссылки "реферальными"
|
||||
- ❌ Называть реферальные ссылки "партнерскими"
|
||||
- ❌ Использовать термины взаимозаменяемо
|
||||
- ❌ Путать логику обработки в резолверах
|
||||
|
||||
#### **13.6.6 Примеры использования**
|
||||
|
||||
**Сценарий 1 - Деловое партнерство**:
|
||||
```
|
||||
Фулфилмент-центр хочет пригласить логистическую компанию
|
||||
→ Использует партнерскую ссылку ?partner=CODE
|
||||
→ Логисты регистрируются и сразу становятся партнерами
|
||||
→ Могут сразу работать друг с другом
|
||||
```
|
||||
|
||||
**Сценарий 2 - Маркетинговая кампания**:
|
||||
```
|
||||
Организация запускает рекламу в соцсетях
|
||||
→ Использует реферальную ссылку ?ref=CODE
|
||||
→ Люди регистрируются, организация получает сферы
|
||||
→ Партнерство НЕ создается (это маркетинг)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 14. 🌐 ИНТЕГРАЦИИ С СИСТЕМОЙ
|
||||
@ -3464,7 +3312,7 @@ const handleSuppliesClick = () => {
|
||||
|
||||
_Эта база знаний создана путем объединения rules-unified.md (v3.0) и fulfillment-cabinet-rules.md (v1.0) с устранением всех несоответствий и добавлением критически важных улучшений: быстрый справочник, глоссарий терминов, детальные алгоритмы процессов, edge cases._
|
||||
|
||||
_Версия: 10.1_
|
||||
_Версия: 10.2_
|
||||
_Дата создания: 2025_
|
||||
_Статус: ЕДИНЫЙ ИСТОЧНИК ИСТИНЫ - ГОТОВ К РАЗРАБОТКЕ_
|
||||
|
||||
@ -3560,3 +3408,12 @@ _Статус: ЕДИНЫЙ ИСТОЧНИК ИСТИНЫ - ГОТОВ К РАЗ
|
||||
- ✅ **СИСТЕМА МАРКИРОВКИ**: 📖 ФАКТ, 🧠 ИНТЕРПРЕТАЦИЯ, ❓ ПРЕДПОЛОЖЕНИЕ, ⚠️ НЕ НАЙДЕНО
|
||||
- ✅ **СТОП-СЛОВА**: Список категоричных утверждений для избегания без доказательств
|
||||
- ✅ **ОБЯЗАТЕЛЬНЫЕ ПРАВИЛА 11-13**: Указание источников и осторожные формулировки
|
||||
|
||||
### 🔗 ПАРТНЕРСКАЯ И РЕФЕРАЛЬНАЯ СИСТЕМА v10.2:
|
||||
|
||||
- ✅ **ДОБАВЛЕН РАЗДЕЛ 13.6**: Критическое различие партнерских и реферальных ссылок
|
||||
- ✅ **ЧЕТКИЕ ОПРЕДЕЛЕНИЯ**: Партнерские (?partner=) vs Реферальные (?ref=) ссылки
|
||||
- ✅ **ТЕХНИЧЕСКИЕ ПРАВИЛА**: Различия в обработке кодов в резолверах
|
||||
- ✅ **UI СПЕЦИФИКАЦИИ**: Разные интерфейсы для партнерства и маркетинга
|
||||
- ✅ **ЗАПРЕТЫ ПУТАНИЦЫ**: Строгие правила именования и терминологии
|
||||
- ✅ **ПРИМЕРЫ СЦЕНАРИЕВ**: Деловое партнерство vs маркетинговые кампании
|
||||
|
Reference in New Issue
Block a user