diff --git a/rules-complete-BACKUP.md b/rules-complete-BACKUP.md new file mode 100644 index 0000000..2287ff1 --- /dev/null +++ b/rules-complete-BACKUP.md @@ -0,0 +1,3648 @@ +# 🔒 РЕЗЕРВНАЯ КОПИЯ - НЕ РЕДАКТИРОВАТЬ БЕЗ РАЗРЕШЕНИЯ! + +> 🚨 **КРИТИЧЕСКИ ВАЖНО**: Это РЕЗЕРВНАЯ КОПИЯ файла rules-complete.md +> +> ❌ **ЗАПРЕЩЕНО РЕДАКТИРОВАТЬ БЕЗ ЯВНОГО РАЗРЕШЕНИЯ ПОЛЬЗОВАТЕЛЯ!** +> +> 📅 **Дата создания резерва**: 2025-08-08 +> 🔐 **Статус**: ЗАЩИЩЕН ОТ ИЗМЕНЕНИЙ +> 📄 **Оригинальный файл**: rules-complete.md + +--- + +# ПРАВИЛА СИСТЕМЫ УПРАВЛЕНИЯ СКЛАДАМИ И ПОСТАВКАМИ - ЕДИНЫЙ ИСТОЧНИК ИСТИНЫ v10.0 + +> ⚠️ **АБСОЛЮТНО ПОЛНЫЙ ЕДИНЫЙ ИСТОЧНИК ИСТИНЫ**: Данный файл объединяет АБСОЛЮТНО ВСЕ правила системы: протоколы работы Claude Code, детальные протоколы по сложности, систему предотвращения нарушений, расширенную самопроверку, специальный UI/UX протокол и бизнес-правила. Визуальные правила вынесены в отдельный файл visual-design-rules.md с автоматической интеграцией. + +## 📚 СТРУКТУРА ДОКУМЕНТАЦИИ + +### Основные файлы правил: + +- **rules-complete.md** (этот файл) - общие бизнес-правила и процессы +- **wholesale-cabinet-rules.md** - технические детали кабинета поставщика +- **visual-design-rules.md** - визуальные правила (уже интегрирован) + +### Когда какой файл читать: + +- При работе с компонентами поставщика → [wholesale-cabinet-rules.md](./wholesale-cabinet-rules.md) +- При изменении бизнес-логики → rules-complete.md +- При работе с UI/UX → [visual-design-rules.md](./visual-design-rules.md) + +## 🔴 ПРАВИЛА ВЗАИМОДЕЙСТВИЯ С CLAUDE + +### Основные принципы работы: + +- **Двухэтапный процесс**: Планирование → Одобрение → Выполнение +- **Обязательное чтение правил** перед каждой задачей +- **Детальные протоколы** по сложности задач +- **Система проверок** и самоконтроля +- **Честность и прозрачность** при неопределенности + +### Обязательная последовательность: + +1. Читать rules-complete.md перед началом работы +2. Определить сложность задачи +3. Применить соответствующий протокол +4. Создать план через TodoWrite +5. Получить одобрение пользователя +6. Выполнить согласно плану +7. Проверить качество результата + +## 🛠️ ПРОТОКОЛЫ РАБОТЫ ПО СЛОЖНОСТИ + +### Краткий обзор протоколов: + +- **Простые задачи**: Прямое выполнение с базовыми проверками +- **Средние задачи**: Трехэтапный процесс (Анализ → План → Выполнение) +- **Сложные задачи**: Расширенный анализ с множественными проверками +- **Критические задачи**: Полный протокол безопасности + +### Определение сложности: + +- **Средняя**: 2-3 файла, изменение логики в 1-2 модулях +- **Высокая**: 4+ файлов, изменение архитектуры, влияние на несколько кабинетов + +### 🔥 ПРОТОКОЛ ВЫСОКОЙ СЛОЖНОСТИ + +**Обязательные этапы для сложных задач:** + +1. **СТОП! ГЛУБОКИЙ АНАЛИЗ** - уточнить все требования у пользователя +2. **ИССЛЕДОВАНИЕ** - изучить все связанные файлы параллельно +3. **ДЕТАЛЬНЫЙ ПЛАН** - с промежуточными проверками и rollback точками + +### ❓ СИСТЕМА УТОЧНЕНИЙ + +**Когда ОБЯЗАТЕЛЬНО спрашивать:** + +- Обнаружил противоречие в правилах +- Задача может нарушить архитектуру системы +- Неясно как применить правило к ситуации +- Есть несколько способов с разными последствиями + +### 🎨 UI/UX ПРОТОКОЛ + +**Автоматическая активация** при ключевых словах: дизайн, интерфейс, компонент, UI, UX + +**Обязательно:** + +- Прочитать visual-design-rules.md перед началом +- Проверить соответствие цветовой палитре +- Использовать glass-эффекты согласно дизайн-системе + +## 🚨 СИСТЕМА КОНТРОЛЯ КАЧЕСТВА + +### Принципы контроля: + +- **Стоп-сигналы** перед критическими действиями +- **Принудительные проверки** соблюдения протоколов +- **Автоматические триггеры** для специфических ситуаций +- **Система блокировки** нарушений +- **Расширенная самопроверка** с финальными проверками + +### Обязательные остановки: + +- Перед анализом компонентов без использования инструментов +- При любой неопределенности или сомнениях +- Перед выполнением средних/сложных задач без протокола + +### Финальная проверка: + +"Применил ли правильный протокол, проверил все правила, готов результат к production?" + +## ⚡ БЫСТРЫЙ СПРАВОЧНИК + +### 🚨 КРИТИЧЕСКИЕ ПРАВИЛА (ОБЯЗАТЕЛЬНЫ К СОБЛЮДЕНИЮ) + +1. **🔴 ТИПИЗАЦИЯ**: Каждый предмет ОБЯЗАТЕЛЬНО имеет тип: `PRODUCT`, `CONSUMABLE`, `DEFECT`, `FINISHED_PRODUCT` +2. **🔴 WORKFLOW**: Нельзя пропускать статусы поставок: PENDING → SUPPLIER_APPROVED → CONFIRMED → ... → DELIVERED +3. **🔴 ДОСТУП**: Фулфилмент = полный доступ, Селлер ≠ доступ к чужим данным, Брак = ЗАПРЕЩЕН к заказу +4. **🔴 ПАРТНЕРСТВО**: Все связи через модель `Counterparty`, поставщики в формах ТОЛЬКО из партнеров `WHOLESALE` +5. **🔴 ФИЛЬТРАЦИЯ**: По типу предмета происходит в GraphQL резолверах, НЕ на фронтенде + +### 🔍 БЫСТРЫЙ ПОИСК ПО ТЕМАМ + +| Тема | Раздел | Ключевые понятия | +| ----------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------- | +| **Типы предметов** | [2](#2--типизация-предметов) | PRODUCT, CONSUMABLE, DEFECT, FINISHED_PRODUCT | +| **Кабинет фулфилмента** | [11](#11--кабинет-фулфилмента-полная-документация) | Склад, Услуги, Сотрудники, 6 модулей | +| **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 | +| **Критические запреты** | [17](#17--критические-запреты) | Что НЕЛЬЗЯ делать в системе | + +### 🎯 ДЛЯ РАЗНЫХ РОЛЕЙ + +**👩💻 РАЗРАБОТЧИКИ**: Разделы [18](#18--graphql-и-typescript-правила), [19](#19--архитектурные-принципы), [20](#20--правила-качества-кода), [24](#24--технические-приложения) +**📊 АНАЛИТИКИ**: Разделы [15](#15--статистика-и-аналитика), [6](#6--процесс-создания-продукта), [7](#7--система-учета-движения-товаров) +**👔 МЕНЕДЖЕРЫ**: Разделы [1](#1--основные-принципы-системы), [3](#3--структура-кабинетов), [5](#5--workflow-поставок) + +--- + +## 🔤 ГЛОССАРИЙ ТЕРМИНОВ + +> Для людей → `В коде` + +### **ТИПЫ ПРЕДМЕТОВ:** + +- **ТОВАР** → `PRODUCT` - базовый товар от поставщика, может стать продуктом или браком +- **РАСХОДНИКИ** → `CONSUMABLE` - материалы, классифицируются по назначению при использовании (операционные/производственные) +- **БРАК** → `DEFECT` _(НЕ РЕАЛИЗОВАНО)_ - функционал брака еще не внедрен в систему +- **ПРОДУКТ** → `FINISHED_PRODUCT` _(планируется)_ - готовый товар, создается из товара по рецептуре + +### **ТИПЫ ОРГАНИЗАЦИЙ:** + +- **ПОСТАВЩИК** → `WHOLESALE` - создает товары и расходники, обрабатывает заказы +- **СЕЛЛЕР** → `SELLER` - заказывает товары, создает поставки на маркетплейсы +- **ФУЛФИЛМЕНТ** → `FULFILLMENT` - обрабатывает товары, создает продукты, максимальные права +- **ЛОГИСТИКА** → `LOGIST` - управляет доставками, подтверждает транспортировку + +### 2.2 Правила создания предметов по ролям + +**КТО МОЖЕТ СОЗДАВАТЬ:** + +- **ПОСТАВЩИК** (`WHOLESALE`): Товары (`PRODUCT`) и Расходники (`CONSUMABLE`) +- **ФУЛФИЛМЕНТ** (`FULFILLMENT`): Продукты (`FINISHED_PRODUCT`) - только из существующих товаров +- **СЕЛЛЕР/ЛОГИСТ**: НЕ МОГУТ создавать предметы + +**КТО МОЖЕТ ПОКУПАТЬ:** + +- **СЕЛЛЕР** (`SELLER`): + - Товары и расходники у поставщиков + - Расходники фулфилмента у фулфилмента (через рецептуру в поставке) +- **ФУЛФИЛМЕНТ** (`FULFILLMENT`): Товары и расходники у поставщиков +- **ПОСТАВЩИК/ЛОГИСТ**: НЕ МОГУТ покупать предметы + +**ЭКОНОМИЧЕСКИЙ УЧЕТ:** + +- Когда селлер выбирает расходники фулфилмента в рецептуре, это формирует экономические данные: + - В кабинете селлера: расход на расходники фулфилмента + - В кабинете фулфилмента: доход от продажи расходников селлеру + +### **КЛЮЧЕВЫЕ СУЩНОСТИ:** + +- **Контрагент** → `Counterparty` - связь между организациями для партнерства +- **Поставка** → `SupplyOrder` - заказ товаров/расходников с workflow статусами +- **Рецептура** - состав продукта: товар + услуги + расходники (задается селлером) + +### **КОНТЕКСТНО-ЗАВИСИМЫЕ ТЕРМИНЫ:** + +#### **SupplyOrder - многосторонний документ** + +SupplyOrder представляет собой единый документ, который видится по-разному каждым участником процесса: + +**ДЛЯ СОЗДАТЕЛЕЙ (Селлер/Фулфилмент):** + +- **Термин**: "Поставка" +- **Контекст**: Они создают поставку товаров и расходников на фулфилмент +- **Включает**: Весь процесс от закупки до приемки на склад + +**ДЛЯ ПОСТАВЩИКА (исполнитель товарной части):** + +- **Термин**: "Заявка на покупку" +- **Контекст**: Получают запрос на продажу своих товаров/расходников +- **Действия**: Могут одобрить или отклонить в зависимости от наличия + +**ДЛЯ ЛОГИСТИКИ (исполнитель транспортной части):** + +- **Термин**: "Заявка на доставку" +- **Контекст**: Получают запрос на транспортировку груза +- **Действия**: Могут подтвердить или отклонить в зависимости от возможностей + +**ОТОБРАЖЕНИЕ В ИНТЕРФЕЙСЕ КАБИНЕТОВ:** +| Кабинет | Название раздела | Обоснование | +|---------|-----------------|-------------| +| Селлер | "Мои поставки" | Создает и управляет поставками | +| Поставщик | "Заявки на покупку" | Обрабатывает входящие заявки | +| Логистика | "Заявки на доставку" | Управляет транспортировкой | +| Фулфилмент | "Входящие поставки" | Принимает поставки на склад | + +**ВАЖНО**: Это один и тот же объект SupplyOrder в базе данных, но каждый участник работает со своей стороной процесса. + +#### **Маркет vs Маркетплейс - четкое разделение** + +**МАРКЕТ** (`/market`): + +- **Что это**: Внутренний раздел системы +- **Функция**: Глобальный каталог всех товаров от всех поставщиков +- **Доступ**: Для всех типов организаций в системе +- **НЕ путать**: С названиями физических рынков типа "ОПТ Маркет" + +**МАРКЕТПЛЕЙС** (Wildberries, Ozon): + +- **Что это**: Внешние торговые площадки +- **Функция**: Конечные точки продаж для селлеров +- **Интеграция**: Через API ключи в настройках +- **Использование**: "Поставки на маркетплейсы", "Отгрузка на маркетплейсы" + +--- + +## 📑 ОГЛАВЛЕНИЕ + +> 📋 **ЧТО ОБЪЕДИНЕНО**: +> +> - rules-unified.md (v3.0) - общая база знаний системы +> - fulfillment-cabinet-rules.md (v1.0) - детализация кабинета фулфилмента +> - Устранены все несоответствия в терминах, последовательностях и детализации + +### 🏗️ **АРХИТЕКТУРА И ОСНОВЫ** + +1. [🎯 Основные принципы системы](#1--основные-принципы-системы) +2. [📦 Типизация предметов](#2--типизация-предметов) +3. [🏢 Структура кабинетов](#3--структура-кабинетов) +4. [🔐 Система ролей и доступов](#4--система-ролей-и-доступов) + +### 🚚 **WORKFLOW И ПРОЦЕССЫ** + +5. [🚚 Workflow поставок](#5--workflow-поставок) +6. [🔄 Процесс создания продукта](#6--процесс-создания-продукта) +7. [📊 Система учета движения товаров](#7--система-учета-движения-товаров) + +### 🏢 **КАБИНЕТЫ СИСТЕМЫ** + +8. [🏠 Общие правила кабинетов](#8--общие-правила-кабинетов) +9. [🏠 Кабинет селлера (детальные правила)](#9--кабинет-селлера-детальные-правила) +10. [🏪 Кабинет поставщика](#10--кабинет-поставщика) +11. [🏭 Кабинет фулфилмента](#11--кабинет-фулфилмента) +12. [🚚 Кабинет логистики](#12--кабинет-логистики) + +### 🤝 **СИСТЕМА ПАРТНЕРСТВА** + +13. [🤝 Система партнерства и контрагентов](#13--система-партнерства-и-контрагентов) + +### 🌐 **ИНТЕГРАЦИИ И ФУНКЦИИ** + +14. [🌐 Интеграции с системой](#14--интеграции-с-системой) +15. [📊 Статистика и аналитика](#15--статистика-и-аналитика) +16. [📱 Правила UI/UX и интерфейса](#16--правила-uiux-и-интерфейса) +17. [⚠️ Критические запреты](#17--критические-запреты) + +### 🛠️ **ТЕХНИЧЕСКИЕ ПРАВИЛА** + +18. [🛠️ GraphQL и TypeScript правила](#18--graphql-и-typescript-правила) +19. [🔧 Архитектурные принципы](#19--архитектурные-принципы) +20. [🎯 Правила качества кода](#20--правила-качества-кода) +21. [🔍 Диагностика и решение проблем](#21--диагностика-и-решение-проблем) + +### 📋 **ПРИЛОЖЕНИЯ** + +22. [📋 Категории товаров и расходников](#22--категории-товаров-и-расходников) +23. [🎖️ Приоритеты разработки](#23--приоритеты-разработки) + +### 🚨 **КРИТИЧЕСКИЕ СИТУАЦИИ** + +24. [🚨 Критические ситуации и Edge Cases](#-критические-ситуации-и-edge-cases) + +### 📎 **ТЕХНИЧЕСКИЕ ПРИЛОЖЕНИЯ** + +25. [📎 Технические приложения (GraphQL, компоненты)](#24--технические-приложения) + +--- + +## 🏷️ РЕЕСТР СУЩНОСТЕЙ СИСТЕМЫ + +### 📦 **ОСНОВНЫЕ ПРЕДМЕТЫ** + +| Сущность | Название в системе | Кабинет создания | Описание | Статус | +| ---------- | -------------------------------------- | ---------------- | ----------------------------------------------- | -------------- | +| Товар | `Product` (type: `PRODUCT`) | Поставщик | Базовый тип товара от поставщика | ✅ Реализовано | +| Расходники | `Product` (type: `CONSUMABLE`) | Поставщик | Материалы и вспомогательные товары | ✅ Реализовано | +| Брак | `Product` (type: `DEFECT`)\* | Фулфилмент | Производная от товара с дефектами | 📋 Планируется | +| Продукт | `Product` (type: `FINISHED_PRODUCT`)\* | Фулфилмент | Готовый к продаже товар (производная от товара) | 📋 Планируется | + +> **\* Планируется**: Типы `DEFECT` и `FINISHED_PRODUCT` еще не добавлены в Prisma схему + +### 🏢 **ОРГАНИЗАЦИИ И РОЛИ** + +| Сущность | Название в системе | Основные функции | Статус | +| ---------- | ------------------------------------ | --------------------------------------- | -------------- | +| Поставщик | `Organization` (type: `WHOLESALE`) | Создание товаров, управление поставками | ✅ Реализовано | +| Селлер | `Organization` (type: `SELLER`) | Заказ товаров, управление поставками | ✅ Реализовано | +| Фулфилмент | `Organization` (type: `FULFILLMENT`) | Обработка товаров, управление складом | ✅ Реализовано | +| Логистика | `Organization` (type: `LOGIST`) | Управление доставками | ✅ Реализовано | + +### 🤝 **СИСТЕМА ПАРТНЕРСТВА** + +| Сущность | Название в системе | Описание | Статус | +| ---------- | --------------------- | ------------------------- | -------------- | +| Контрагент | `Counterparty` | Связь между организациями | ✅ Реализовано | +| Заявка | `CounterpartyRequest` | Запрос на сотрудничество | ✅ Реализовано | + +--- + +## 1. 🎯 ОСНОВНЫЕ ПРИНЦИПЫ СИСТЕМЫ + +### 1.1 Архитектура системы + +**СТРУКТУРА СИСТЕМЫ ПО КАБИНЕТАМ:** + +**🏢 КАБИНЕТ ПОСТАВЩИКА** - создает и управляет: + +- **ТОВАР** (`PRODUCT`) - базовые товары от поставщика +- **РАСХОДНИКИ** (`CONSUMABLE`) - материалы и вспомогательные товары от поставщика + +**🏭 КАБИНЕТ ФУЛФИЛМЕНТА** - принимает, обрабатывает и управляет всеми типами: + +- **ТОВАР** (`PRODUCT`) - базовые товары от поставщиков (принятые на склад) +- **БРАК** (`DEFECT` - планируется) - производная от товара (товар с дефектами) +- **ПРОДУКТ** (`FINISHED_PRODUCT` - планируется) - готовый к продаже товар +- **РАСХОДНИКИ (`CONSUMABLE`)** - единый базовый тип, классифицируется по назначению при использовании: + - **"Операционные расходники"** - используются фулфилментом для выполнения услуг + - **"Производственные расходники"** - используются в рецептурах селлеров для создания продуктов + +**🛍️ КАБИНЕТ СЕЛЛЕРА** - заказывает и управляет поставками: + +- Создает заказы товаров и расходников +- Управляет поставками на фулфилмент и маркетплейсы +- Отслеживает статусы поставок + +### 1.2 Основные принципы разработки + +**КРИТИЧЕСКИ ВАЖНЫЕ ПРИНЦИПЫ:** + +1. **Строгая типизация**: Каждый предмет имеет один из типов: ТОВАР (`PRODUCT`), РАСХОДНИКИ (`CONSUMABLE`), БРАК и ПРОДУКТ (планируется) +2. **Партнерская система**: Все связи между организациями через модель `Counterparty` +3. **Workflow статусов**: Строгая последовательность статусов поставок +4. **Безопасность доступа**: Контроль доступа на уровне GraphQL резолверов +5. **Единый источник истины**: Централизованное управление данными + +--- + +## 2. 📦 ТИПИЗАЦИЯ ПРЕДМЕТОВ + +### 2.1 Два реализованных и два планируемых типа предметов + +#### **1. ТОВАР** (`PRODUCT` - базовый тип) + +- **СОЗДАЕТСЯ**: Поставщиком +- **СТАТУС**: Может быть активным/неактивным +- **ЗАКАЗ**: Доступен для заказа всеми типами организаций +- **ТРАНСФОРМАЦИЯ**: Может стать ПРОДУКТОМ или БРАКОМ +- **ЦЕНА**: Обязательна, больше 0 + +#### **2. РАСХОДНИКИ** (`CONSUMABLE` - базовый тип) + +- **СОЗДАЕТСЯ**: Поставщиком как универсальный тип +- **КЛАССИФИКАЦИЯ ПРИ ЗАКАЗЕ**: + - Фулфилмент заказывает → "Расходники фулфилмента" + - Селлер заказывает → "Расходники селлеров" +- **ДОСТУП**: Видны всем типам организаций в маркете + +#### **3. БРАК** (`DEFECT` - планируется, производная от товара) + +- **БУДЕТ СОЗДАВАТЬСЯ**: Фулфилментом на основе существующего ТОВАРА при обнаружении дефектов +- **МОМЕНТ СОЗДАНИЯ**: В процессе обработки товара (ШАГ 3 алгоритма создания продукта) при выявлении брака +- **СВЯЗЬ**: Обязательная связь с родительским товаром (parentId) +- **ЗАКАЗ**: ЗАПРЕЩЕН заказ брака +- **СТАТУС**: Всегда неактивен для заказа +- **ЦЕНА**: Для селлера - себестоимость дефектного товара, для фулфилмента - 0 +- **WORKFLOW**: Особый процесс списания и утилизации +- **УЧЕТ**: Отдельный учет в статистике потерь +- **ОТОБРАЖЕНИЕ**: Виден только для учета потерь +- **⚠️ СТАТУС РАЗРАБОТКИ**: Тип `DEFECT` еще не добавлен в схему БД + +#### **4. ПРОДУКТ** (`FINISHED_PRODUCT` - планируется, производная от товара) + +- **БУДЕТ СОЗДАВАТЬСЯ**: Фулфилментом на основе ТОВАРА по заказу селлера +- **ИНИЦИАТОР**: Селлер создает заказ с рецептурой, фулфилмент исполняет +- **СВЯЗЬ**: Обязательная связь с родительским товаром (parentId) +- **РЕЦЕПТУРА**: Задается селлером при создании заказа (Товар + Услуга + Расходники) +- **СТАТУСЫ**: "в работе" → "готов к отправке" +- **ЗАКАЗ**: Доступен только в статусе "готов к отправке" +- **⚠️ СТАТУС РАЗРАБОТКИ**: Тип `FINISHED_PRODUCT` еще не добавлен в схему БД + +### 2.2 Обязательные поля карточки + +**КРИТИЧЕСКИ ВАЖНО**: Название, артикул, цена > 0, тип предмета +**ИСКЛЮЧЕНИЕ ДЛЯ БРАКА**: Цена может быть 0 для фулфилмента (себестоимость для селлера) +**ОБЯЗАТЕЛЬНО**: Количество (может быть 0 для предзаказа) +**ДЛЯ ПРОИЗВОДНЫХ ТИПОВ**: Обязательная связь с родительским предметом + +--- + +## 3. 🏢 СТРУКТУРА КАБИНЕТОВ + +### 3.1 Общие принципы кабинетов + +**КАЖДЫЙ КАБИНЕТ ИМЕЕТ:** + +1. **Главная страница** (`/dashboard`) - общая информация и статистика +2. **Экономика** (`/economics`) - финансовая аналитика +3. **Универсальные разделы**: + - Маркет (`/market`) - просмотр и заказ товаров + - Партнеры (`/partners`) - управление контрагентами + - Мессенджер (`/messenger`) - связь между организациями + - Настройки (`/settings`) - профиль и API ключи + +### 3.2 Специфические разделы по типам организаций + +**🏪 ПОСТАВЩИК (`WHOLESALE`):** + +- Склад (`/warehouse`) - управление товарами и расходниками +- Поставки (`/supplies`) - обработка заказов от селлеров + +**🛍️ СЕЛЛЕР (`SELLER`):** + +- Мои поставки (`/supplies`) - управление заказами товаров +- WB Интеграция (`/wb-integration`) - связь с Wildberries + +**🏭 ФУЛФИЛМЕНТ (`FULFILLMENT`):** + +- Склад фулфилмента (`/fulfillment-warehouse`) - управление всеми типами товаров +- Поставки фулфилмента (`/fulfillment-supplies`) - обработка поставок +- Услуги (`/services`) - управление услугами, логистикой, расходниками +- Сотрудники (`/employees`) - управление персоналом +- Статистика фулфилмента (`/fulfillment-statistics`) - детальная аналитика + +**🚚 ЛОГИСТИКА (`LOGIST`):** + +- Заявки (`/logistics-requests`) - управление заявками на доставку +- Маршруты (`/routes`) - планирование маршрутов + +--- + +## 4. 🔐 СИСТЕМА РОЛЕЙ И ДОСТУПОВ + +### 4.1 Контроль доступа к разделам + +**ПРОВЕРКА НА УРОВНЕ КОМПОНЕНТОВ:** + +```typescript +{user?.organization?.type === "FULFILLMENT" && ( + // Компоненты доступны только фулфилменту +)} +``` + +**СПЕЦИАЛЬНАЯ ЛОГИКА РОУТИНГА:** + +```typescript +const handleSuppliesClick = () => { + switch (user?.organization?.type) { + case 'FULFILLMENT': + router.push('/fulfillment-supplies') + break + case 'SELLER': + router.push('/supplies') + break + // ... другие типы + } +} +``` + +### 4.2 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.3 Контроль доступа к заказам + +- **Создатель заказа** - полный доступ к своим заказам +- **Поставщик** - доступ к заказам, где он является поставщиком +- **Фулфилмент-центр** - доступ к заказам, направленным в его центр +- **Логистическая компания** - доступ к заказам для доставки + +--- + +## 5. 🚚 WORKFLOW ПОСТАВОК + +> 📌 **ВИЗУАЛЬНЫЕ ПРАВИЛА**: См. [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 Система уведомлений + +**Обязательные уведомления:** + +- Поставщику: о новом заказе +- Фулфилменту: о подтвержденной поставке +- Логистике: о назначении на заявку +- Селлеру: об изменении каждого статуса + +--- + +## 6. 🔄 ПРОЦЕСС СОЗДАНИЯ ПРОДУКТА + +> 📌 **СВЯЗАННЫЕ РАЗДЕЛЫ**: +> +> - Типы предметов → См. [раздел 2.2](#22-обязательные-поля-карточки) +> - Склад фулфилмента → См. [раздел 11.2](#112-структура-раздела-склад-фулфилмента) +> - Статистика движения → См. [раздел 7](#7--система-учета-движения-товаров) + +### 6.1 Пошаговый алгоритм создания продукта + +> 📌 **ВИЗУАЛЬНЫЕ ПРАВИЛА**: См. [visual-design-rules.md - Процесс создания продукта](#143-процесс-создания-продукта---визуальный-workflow) + +#### **ПРЕДВАРИТЕЛЬНОЕ УСЛОВИЕ: РЕЦЕПТУРА ЗАДАНА** (селлер) + +``` +Время: при создании заявки на поставку +Действие: селлер указывает рецептуру продукта +Обязательные компоненты: + ✓ Базовый товар (от поставщика) + ✓ Услуги фулфилмента (упаковка, маркировка и т.д.) + ✓ Расходники (материалы для производства) +Результат: рецептура сохраняется в заявке и передается фулфилменту +``` + +#### **ШАГ 1: ПОСТУПЛЕНИЕ НА СКЛАД** (автоматически) + +``` +Время: при смене статуса поставки DELIVERED +Действие: товар переходит в статус "на складе" +Ответственный: система +Результат: +Прибыло в статистике товаров +``` + +#### **ШАГ 2: ПЛАНИРОВАНИЕ РАБОТЫ** (менеджер фулфилмента) + +``` +Время: в течение 2 рабочих дней после поступления +Действие: назначение параметров обработки +Ответственный: менеджер фулфилмента +Обязательные поля: + ✓ Дедлайн выполнения (не более 5 рабочих дней) + ✓ Ответственный исполнитель (из списка сотрудников) + ✓ Рецептура (товар + услуги + расходники, указанная селлером в заявке на поставку) +Опциональные поля: + - Место хранения готовых продуктов (зона склада, стеллаж, ячейка) + - Комментарии к работе +Результат: поставка переходит во вкладку "В работе" +``` + +#### **ШАГ 3: ОБРАБОТКА ТОВАРА** (исполнитель) + +``` +Время: согласно дедлайну (обычно 1-3 дня) +Действие: физическая обработка товара +Ответственный: назначенный сотрудник +Обязательные действия: + 1. Проверка качества товара + 2. Фиксация фактического количества + 3. Выявление и учет брака + 4. Применение рецептуры (услуги + расходники) + 5. Создание готового продукта +Точки контроля: + - Соответствие плану/факту + - Качество выполнения услуг + - Расход материалов по норме + +УЧЕТ ПЛАН/ФАКТ: + - ПЛАН: Количество товаров из поставки селлера (указано в заказе) + - ФАКТ: Реальное количество после обработки = Брак + Хороший товар + - ДЕТАЛИЗАЦИЯ: Учет ведется по каждому размеру/объему/варианту + - КОРРЕКТИРОВКА: Статистика автоматически обновляется на фактические данные +``` + +#### **ШАГ 4: КОНТРОЛЬ КАЧЕСТВА** (менеджер/отдел качества) + +``` +Время: сразу после завершения ШАГ 3 +Действие: приемка готовой продукции +Ответственный: менеджер или контролер качества +Критерии приемки: + ✓ Соответствие рецептуре селлера + ✓ Качество выполненных услуг + ✓ Правильность упаковки/маркировки + ✓ Полнота комплектации +Результат: продукт готов к отправке или отправлен на доработку +``` + +#### **ШАГ 5: ЗАВЕРШЕНИЕ** (система + менеджер) + +``` +Время: после успешного прохождения контроля качества +Действие: финализация процесса +Автоматические действия: + - Создание записи FINISHED_PRODUCT в БД + - Обновление статистики: товар "на складе" → продукт "готов" + - Списание использованных расходников + - Уведомление селлера о готовности +Ручные действия менеджера: + - Подтверждение перехода во вкладку "Выполнено" + - Указание фактических расходов материалов + - Добавление комментариев о выполненной работе +``` + +### 6.2 Временные рамки и SLA + +| Этап | Стандартное время | Максимальное время | Ответственный | +| ----------------- | ----------------- | ------------------ | -------------- | +| Планирование | 1 рабочий день | 2 рабочих дня | Менеджер ФФ | +| Обработка | 2-3 рабочих дня | 5 рабочих дней | Исполнитель | +| Контроль качества | 4 часа | 1 рабочий день | Отдел качества | +| Завершение | 2 часа | 4 часа | Менеджер ФФ | + +### 6.3 Управление браком и расхождениями + +### 6.4 Детальная рецептура продукта + +**РЕЦЕПТУРА ПРОДУКТА** (задается селлером при создании поставки): + +- **БАЗОВЫЙ ТОВАР**: Исходный материал (обязательно) + - Артикул товара + - Количество единиц + - Размерная сетка (если применимо) + +- **УСЛУГА ФУЛФИЛМЕНТА**: Из каталога услуг фулфилмента + - Тип услуги (глажка, упаковка, маркировка и т.д.) + - Количество применений + - Специальные требования + +- **РАСХОДНИК СЕЛЛЕРА**: Материалы селлера (опционально) + - Фирменная упаковка + - Этикетки, бирки + - Дополнительные аксессуары + +- **РАСХОДНИК ФУЛФИЛМЕНТА**: Материалы фулфилмента (опционально) + - Стандартная упаковка + - Защитные материалы + - Маркировочные элементы + +- **СВЯЗЬ С МАРКЕТПЛЕЙСОМ**: Привязка к карточке (опционально) + - ID карточки на маркетплейсе + - Артикул маркетплейса + - Особые требования МП + +**ФОРМУЛА**: ПРОДУКТ = Товар + Услуга(и) + Расходники селлера + Расходники ФФ + +### 6.5 Учет план/факт в процессе работы (без брака) + +**ПЛАН**: Количество товара из поставки селлера +**ФАКТ**: Реальное количество после пересчета (работник фулфилмента производит сортировку при пересчете) + +**ФИКСАЦИЯ ПОТЕРЬ:** + +- **КОГДА**: В процессе работы (вкладка "В работе") +- **ЧТО**: Недостача, повреждения (без создания записей брака) +- **КАК**: Корректировка количества в статистике + +**WORKFLOW СОЗДАНИЯ ПРОДУКТА:** + +1. Товар поступает на склад фулфилмента (статус "на складе") +2. Товар берется в работу (переход в статус "в обработке") +3. Исполнитель производит пересчет и сортировку +4. Создается готовый продукт (тип FINISHED_PRODUCT) +5. Продукт готов к отправке на маркетплейсы + +**ВЛИЯНИЕ НА СТАТИСТИКУ:** + +- При принятии поставки: +План в статистику +- При выявлении факта: корректировка на реальные данные +- **ФОРМУЛА**: Факт = Потери + Хороший товар + _Где потери - это недостача/повреждения, выявленные при пересчете и сортировке_ +- **ЛОГИКА**: Фактическое количество = сумма всех пересчитанных предметов +- **ПЛАН/ФАКТ**: Корректировка статистики при выявлении расхождений + +--- + +> 🚧 **БУДУЩАЯ ФУНКЦИОНАЛЬНОСТЬ**: Система статусов товаров в фулфилменте будет детализирована позже + +## 7. 📊 СИСТЕМА УЧЕТА ДВИЖЕНИЯ ТОВАРОВ + +### 7.1 Принципы учета в фулфилменте + +**ОСНОВНЫЕ ПРИНЦИПЫ:** + +- **ПРИХОД**: Товары поступают через принятые поставки (из состояния "в пути" → "на складе") +- **ОБРАБОТКА**: Товары переходят в статус "в работе" для создания продуктов +- **РАСХОД**: Товары убывают при отгрузке, списании, возврате, превращении в продукты +- **УЧЁТ**: Ведется учет прихода и расхода для каждого типа предметов +- **ВИЗУАЛИЗАЦИЯ**: Движение отображается в дополнительных значениях + +### 7.2 Дополнительные и основные значения + +**ДОПОЛНИТЕЛЬНЫЕ ЗНАЧЕНИЯ (показатели движения):** + +- **ПРИБЫЛО**: Количество предметов, поступивших на склад +- **УБЫЛО**: Количество предметов, списанных со склада +- **ВЛИЯНИЕ**: От этих значений зависят основные значения (общее количество) + +**ОСНОВНЫЕ ЗНАЧЕНИЯ (текущие остатки):** + +- **ОПРЕДЕЛЕНИЕ**: Итоговое количество предметов на складе +- **РАСЧЁТ**: Основные значения = Предыдущие остатки + Прибыло - Убыло +- **ОТОБРАЖЕНИЕ**: Показываются в каждом модуле статистики +- **РАЗДЕЛЕНИЕ ТОВАРОВ**: + - Товары "на складе" - готовы к обработке + - Товары "в обработке" - находятся в процессе создания продукта + +--- + +## 8. 🏠 ОБЩИЕ ПРАВИЛА КАБИНЕТОВ + +### 8.1 Универсальная структура кабинетов + +**ВСЕ ТИПЫ КАБИНЕТОВ** включают следующие обязательные разделы: + +#### 8.1.1 Страница "Главная" + +**СТАТУС**: Реализовано +**ДОСТУП**: Через навигацию в sidebar для всех типов кабинетов +**СОДЕРЖАНИЕ**: Универсальная страница с типо-зависимыми компонентами + +**ПРАВИЛА**: + +- **ОБЯЗАТЕЛЬНО**: Каждый тип кабинета должен иметь страницу "Главная" +- **НАВИГАЦИЯ**: Доступ через кнопку в sidebar (первая в списке) +- **УНИВЕРСАЛЬНОСТЬ**: Одинаковая структура навигации для всех кабинетов +- **РОУТ**: `/home` с универсальным компонентом HomePageWrapper +- **КОМПОНЕНТЫ**: 4 типо-зависимых компонента: SellerHomePage, FulfillmentHomePage, WholesaleHomePage, LogistHomePage + +#### 8.1.2 Раздел "Экономика" + +**СТАТУС**: Реализовано в системе +**РАСПОЛОЖЕНИЕ**: Перед настройками в каждом кабинете +**СОДЕРЖАНИЕ**: Пустые разделы-заглушки с пометкой "будет добавлен позже" + +**ПРАВИЛА**: + +- **ОБЯЗАТЕЛЬНО**: Каждый кабинет имеет раздел "Экономика" +- **РОУТ**: `/economics` с универсальным компонентом EconomicsPageWrapper +- **КОМПОНЕНТЫ**: 4 типо-зависимых компонента экономики: SellerEconomicsPage, FulfillmentEconomicsPage, WholesaleEconomicsPage, LogistEconomicsPage +- **КНОПКА**: "Экономика" в sidebar навигации перед настройками +- **БЕЗОПАСНОСТЬ**: Проверки доступа и безопасности в экономических компонентах + +#### 8.1.3 Общие разделы для всех кабинетов + +**УНИВЕРСАЛЬНЫЕ РАЗДЕЛЫ** (доступны всем типам): + +- 🏠 **Главная** - основная страница кабинета (реализовано) +- 🛒 **Маркет** - просмотр и заказ товаров +- 🤝 **Партнеры** - управление контрагентами +- 💬 **Мессенджер** - внутренняя связь +- 💰 **Экономика** - финансовая аналитика (реализовано) +- ⚙️ **Настройки** - профиль и конфигурация + +**СПЕЦИАЛИЗИРОВАННЫЕ РАЗДЕЛЫ** (зависят от типа кабинета): + +- Определяются в соответствующих разделах каждого кабинета + +### 8.2 Правила sidebar навигации + +#### 8.2.1 Структура навигации + +**ОБЩИЙ ПРИНЦИП**: + +- Условное отображение: `{user?.organization?.type === "TYPE" && (...)}` +- Адаптивность: сворачиваемый sidebar с `getSidebarMargin()` +- Состояния активности: подсветка текущего раздела + +**ПОРЯДОК РАЗДЕЛОВ В SIDEBAR**: + +1. 🏠 **Главная** (реализовано для всех) +2. **Специализированные разделы** (зависят от типа кабинета) +3. 🛒 **Маркет** (универсальный) +4. 🤝 **Партнеры** (универсальный) +5. 💬 **Мессенджер** (универсальный) +6. 💰 **Экономика** (универсальный, реализовано) +7. ⚙️ **Настройки** (универсальный) +8. **Выход** (универсальный) + +#### 8.2.2 Типо-зависимая логика + +**АДАПТИВНЫЙ РОУТИНГ**: + +```typescript +// Пример: кнопка "Поставки" ведет на разные страницы +const handleSuppliesClick = () => { + switch (user?.organization?.type) { + case 'FULFILLMENT': + router.push('/fulfillment-supplies') + break + case 'SELLER': + router.push('/supplies') + break + case 'WHOLESALE': + router.push('/supplies') + break + case 'LOGIST': + router.push('/logistics-orders') + break + } +} +``` + +--- + +## 9. 🏠 КАБИНЕТ СЕЛЛЕРА (ДЕТАЛЬНЫЕ ПРАВИЛА) + +> 📌 **ВИЗУАЛЬНЫЕ ПРАВИЛА**: См. [visual-design-rules.md - Кабинет селлера](#145-кабинет-селлера) + +### 9.1 Структура раздела "Мои поставки" + +#### **🏢 ПОСТАВКИ НА ФУЛФИЛМЕНТ**: + +- **Товар** - поставка товаров для создания продуктов + - **Карточки** - поставка через WB API с рецептурой (результат: WildberriesSupply) + - **Поставщики** - заказ товаров у поставщиков с рецептурой (результат: SupplyOrder) +- **Расходники селлера** - поставка материалов для товаров селлера + +#### **🛒 ПОСТАВКИ НА МАРКЕТПЛЕЙСЫ** _(планируется)_: + +- **Wildberries** - прямые поставки на WB +- **Ozon** - прямые поставки на Ozon + +### 9.2 UI структура создания поставки расходников селлера + +#### **📄 Структура страницы создания поставки:** + +**ОБНОВЛЕННАЯ СТРУКТУРА СИСТЕМЫ (4 БЛОКА):** + +**БЛОК 1: ПОСТАВЩИКИ** _(адаптивная сетка)_ + +- **Заголовок**: Минималистичный "🏢 Поставщики" без лишних элементов +- **Поиск**: Компактное поле справа "Поиск поставщиков..." (w-64) +- **Отображение**: Карточки поставщиков из раздела "Партнеры" в адаптивной сетке +- **Выбор**: Клик выделяет карточку поставщика +- **Результат**: Загружаются карточки товаров выбранного поставщика в блок 2 + +**БЛОК 2: КАРТОЧКИ ТОВАРОВ** _(горизонтальный скролл - НОВЫЙ)_ + +- **Отображение**: ТОЛЬКО минималистичные карточки товаров 80×112px +- **Содержание**: ТОЛЬКО изображение товара, БЕЗ текста/названий/цен +- **Навигация**: Горизонтальный скролл при множестве товаров +- **Выбор**: Клик добавляет товар в детальный каталог +- **Результат**: Товар добавляется в блок 3 для управления поставкой + +**БЛОК 3: ТОВАРЫ ПОСТАВЩИКА** _(детальный каталог)_ + +- **Отображение**: Детальные карточки выбранных товаров +- **Управление**: Количество, параметры, настройки поставки +- **Результат**: Формирование окончательной поставки + +**БЛОК 4: КОРЗИНА И НАСТРОЙКИ** _(правая панель)_ + +- **Отображение**: Корзина поставки + настройки +- **Управление**: Фулфилмент-центр, дата, логистика + +#### **9.2.1 Детальные правила горизонтального скролла поставщиков** + +**СТРУКТУРА И ОТОБРАЖЕНИЕ:** + +- **Источник данных**: Партнеры типа `WHOLESALE` из раздела "Партнеры" +- **Контейнер**: Фиксированная высота 176px (h-44) с горизонтальным скроллом +- **Блок поставщиков**: Общая высота 180px, включает заголовок + контейнер скролла +- **Направление**: Слева направо (LTR) +- **Поведение**: Плавный скролл с автоскрытием полосы прокрутки + +**РАЗМЕРЫ И АДАПТИВНОСТЬ:** + +- **Десктоп**: Карточка 216×92px, отступы 12px между карточками, 16px от краев +- **Планшет**: Карточка 200×92px, отступы 12px между карточками +- **Мобильный**: Карточка 184×92px, отступы 12px между карточками +- **Высота блока**: 180px фиксированная для всего блока поставщиков + +**ВЗАИМОДЕЙСТВИЕ:** + +- **Навигация**: Колесо мыши (Shift+скролл), стрелки клавиатуры, свайп на тач +- **Выбор**: Клик по карточке → активная рамка + загрузка товаров в блок 2 +- **Состояния**: Default, Hover (box-shadow), Active (цветная рамка), Loading (скелетон) + +**ГРАНИЧНЫЕ СЛУЧАИ:** + +- **1-4 карточки**: Выравнивание по левому краю, скролл неактивен +- **5+ карточек**: Полный горизонтальный скролл +- **Нет партнеров**: Заглушка с ссылкой на раздел "Партнеры" + +**ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ:** + +**Критическая Flex-архитектура:** + +```css +.parent-container { + display: flex; + gap: 16px; + min-height: 0; +} + +.left-block { + flex: 1; + min-width: 0; /* КРИТИЧЕСКИ ВАЖНО для overflow */ + display: flex; + flex-direction: column; +} + +.suppliers-container { + height: 180px; /* Общая высота блока */ + flex-shrink: 0; + min-width: 0; /* Предотвращает растяжение */ +} + +.right-block { + width: 384px; /* w-96 */ + flex-shrink: 0; /* Защита от сжатия */ +} +``` + +**Контейнер скролла:** + +```css +.suppliers-block { + display: flex; + overflow-x: auto; + scroll-behavior: smooth; + gap: 12px; + padding: 0 16px 8px 16px; /* px-4 pb-2 */ + height: 176px; /* h-44 */ + scrollbar-width: thin; + scrollbar-color: #64748b33 transparent; +} + +.suppliers-block:hover { + scrollbar-color: #cbd5e0 #64748b22; +} + +.supplier-card { + flex-shrink: 0; + width: 216px; /* Десктоп */ + height: 92px; /* Фиксированная высота */ + padding: 8px; /* p-2 */ + transition: all 0.2s ease; +} +``` + +**СОДЕРЖАНИЕ КАРТОЧКИ ПОСТАВЩИКА:** + +**Структура (3 строки в 92px высоты):** + +- **Строка 1**: Название + рейтинг (справа, если есть) +- **Строка 2**: ИНН (формат "ИНН: 1234567890") +- **Строка 3**: Бейдж рынка (отдельная строка) + +**Элементы:** + +- **Аватар**: Размер xs, слева с gap-2 +- **Текст**: text-xs для компактности +- **Отступы**: mb-1 между строками 1-2, mb-0.5 между строками 2-3 +- **Padding карточки**: 8px (p-2) + +**ЦВЕТОВАЯ СХЕМА РЫНКОВ:** + +- **"Садовод"** (sadovod): Зеленый `bg-green-500/20 text-green-300 border-green-500/30` +- **"ТЯК Москва"** (tyak-moscow): Синий `bg-blue-500/20 text-blue-300 border-blue-500/30` +- **Другие/не указан**: Серый `bg-gray-500/20 text-gray-300 border-gray-500/30` + +**ДОСТУПНОСТЬ:** + +- `role="tablist"` для контейнера +- `role="tab"` для карточек +- `aria-selected="true/false"` для выбранной карточки +- `tabindex="0"` для активной, `-1` для неактивных + +#### **9.2.2 Правила блока "Карточки товаров" (Блок 2)** + +**НАЗНАЧЕНИЕ И ЛОГИКА:** + +- **Источник данных**: Товары выбранного поставщика из Блока 1 +- **Триггер отображения**: Клик на карточку поставщика → загрузка карточек товаров +- **Взаимодействие**: Клик на карточку товара → добавление в Блок 3 "Товары поставщика" +- **Поведение**: Горизонтальный скролл при множестве товаров + +**АРХИТЕКТУРА И РАЗМЕРЫ:** + +- **Внешний контейнер**: bg-white/10 backdrop-blur-xl border border-white/20 rounded-2xl flex-shrink-0 +- **Внутренний контейнер скролла**: flex gap-3 overflow-x-auto p-4 +- **Стилизация скролла**: scrollbarWidth: 'thin' для тонкой полосы прокрутки +- **Отступы**: padding: 16px (p-4) внутри, gap: 12px (gap-3) между карточками +- **Адаптивная высота**: по содержимому карточек (БЕЗ фиксированной высоты) +- **Визуальное единство**: стеклянный эффект как у других блоков системы +- **БЕЗ заголовков/иконок**: только чистые карточки товаров в контейнере + +**РАЗМЕРЫ КАРТОЧЕК ТОВАРОВ:** + +- **Компактная карточка**: 80×112px (w-20 h-28), соотношение 5:7 +- **Адаптивность**: фиксированный размер для всех устройств + +**СОДЕРЖАНИЕ КАРТОЧКИ ТОВАРА:** + +- **ТОЛЬКО изображение товара**: 80×112px, object-cover +- **Минималистичный дизайн**: БЕЗ текста, названий, цен, иконок +- **Состояния**: Default, Selected, Active (БЕЗ Hover-эффектов) +- **Рамка**: border-white/10, при выборе border-white/30 +- **Фон**: bg-white/5 полупрозрачный + +**ДЕЙСТВИЕ:** +Клик на карточку → добавление товара в Блок 3 (детальный каталог) + +#### **9.2.3 Правила Блока 3 "Детальный каталог товаров"** + +**НАЗНАЧЕНИЕ И СТРУКТУРА:** + +- **Контент**: Детальные карточки выбранных товаров с полным управлением +- **Верхняя панель**: Выбор даты + Выбор Fulfillment + Поиск +- **Основная область**: Сетка карточек товаров с детальной информацией + +#### **9.2.3.1 Структура верхней панели Блока 3** + +**МИНИМАЛИСТИЧНАЯ ПАНЕЛЬ УПРАВЛЕНИЯ:** + +- **Выбор даты поставки**: DatePicker для планирования поставки +- **Выбор Fulfillment-центра**: Select dropdown со списком доступных фулфилментов +- **Поиск по товарам**: Input с иконкой поиска и placeholder +- **Компоновка**: Горизонтальная строка с равномерным распределением + +**ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ:** + +```tsx +// Структура компонентов панели +
ИНН: {supplier.inn}
+ {supplier.market &&