# ПРАВИЛА КАБИНЕТА ПОСТАВЩИКА (WHOLESALE)

> ⚠️ **ВАЖНО**: Это файл с техническими деталями кабинета поставщика.
> Общие бизнес-правила находятся в **[rules-complete.md](./rules-complete.md)**

## Когда использовать этот файл:

- Работа с компонентами `/warehouse`, `/supplier-orders`
- GraphQL запросы для поставщиков
- UI/UX специфика кабинета поставщика
- Технические детали реализации

## 1. 🏪 СТРУКТУРА КАБИНЕТА ПОСТАВЩИКА

### 1.1 Основные разделы

**ПОСТАВЩИК (`WHOLESALE`)** имеет доступ к следующим разделам:

- **Склад** (`/warehouse`) - управление товарами и расходниками
- **Поставки** (`/supplies`) - обработка заказов от селлеров
- **Маркет** (`/market`) - просмотр глобального каталога
- **Партнеры** (`/partners`) - управление контрагентами
- **Мессенджер** (`/messenger`) - связь с партнерами
- **Настройки** (`/settings`) - профиль и API ключи
- **Экономика** (`/economics`) - финансовая аналитика

### 1.2 Навигация и роутинг

#### При входе в систему:

```typescript
switch (user?.organization?.type) {
  case 'WHOLESALE':
    router.push('/supplies') // Направляем на страницу поставок
    break
}
```

#### Специальная логика роутинга:

> 📖 **Бизнес-логика роутинга**: См. [rules-complete.md#4-система-ролей-и-доступов](./rules-complete.md#4--система-ролей-и-доступов)

## 2. 🎨 UI/UX КОМПОНЕНТЫ

### 2.1 Dashboard компоненты

#### Основные компоненты кабинета:

- `WarehouseDashboard` - главный компонент склада
- `SupplierOrdersDashboard` - управление заказами
- `WholesaleEconomicsPage` - экономическая аналитика
- `WholesaleHomePage` - домашняя страница поставщика

#### Wrapper-компоненты:

- `HomePageWrapper` - маршрутизация по типам организаций
- `EconomicsPageWrapper` - адаптивная экономика по кабинетам

#### Специализированные компоненты:

- `SupplierOrderCard` - карточка заказа для поставщика
- `SupplierOrdersContent` - контент страницы заказов
- `SupplierOrdersSearch` - поиск по заказам
- `SupplierOrdersTabs` - табы (активные/завершенные)
- `SupplierOrderStats` - статистика и аналитика заказов

### 2.2 Карточка поставщика в интерфейсе

#### Структура карточки:

```jsx
<div className="supplier-card glass-card">
  <div className="flex items-start gap-2">
    {/* Аватар организации */}
    <OrganizationAvatar organization={supplier} size="sm" />

    <div className="flex-1 min-w-0">
      {/* Название поставщика */}
      <h4 className="text-white font-medium text-sm truncate">{supplier.name || supplier.fullName}</h4>

      {/* ИНН и рынок */}
      <div className="flex items-center gap-2 mt-1">
        <p className="text-white/60 text-xs font-mono">ИНН: {supplier.inn}</p>
        {supplier.market && <Badge className="market-badge">{getMarketLabel(supplier.market)}</Badge>}
      </div>
    </div>
  </div>
</div>
```

#### Визуальные правила:

- **Аватар**: Размер `sm`, слева от текста
- **Название**: Приоритет `name` над `fullName`
- **ИНН**: Моноширинный шрифт, цвет `text-white/60`
- **Рынок**: Badge компонент с индивидуальными цветами

### 2.3 Поисковый интерфейс

```jsx
<Input
  placeholder="Поиск поставщиков..."
  className="bg-white/5 border-white/10 text-white placeholder:text-white/50 pl-10 h-9"
  onChange={(e) => handleSearch(e.target.value)}
/>
```

### 2.4 Цветовые схемы рынков

> 📖 **Полная палитра цветов**: См. [visual-design-rules.md](./visual-design-rules.md)

Примеры для рынков:

- **"Садовод"** (`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`

## 3. 📊 ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ

> 📖 **Бизнес-правила**: См. [rules-complete.md#10-кабинет-поставщика](./rules-complete.md#10--кабинет-поставщика) для правил создания товаров, обязательных полей и статистики

## 4. 🛠️ GRAPHQL API

### 4.1 Основные запросы (Queries)

#### Получение товаров поставщика:

```graphql
query GetMyProducts {
  myProducts {
    id
    name
    article
    price
    quantity
    organization {
      id
      name
      market # Физический рынок поставщика
    }
  }
}
```

#### Получение заказов:

```graphql
query GetSupplierOrders {
  supplyOrders(where: { partnerId: $myOrgId }) {
    id
    status
    totalAmount
    organization {
      name # Заказчик
    }
  }
}
```

#### Получение партнеров:

```graphql
query GetMyCounterparties {
  myCounterparties {
    id
    name
    type
    market
    fullName
    inn
  }
}
```

### 4.2 Мутации (Mutations)

#### Создание товара:

```graphql
mutation CreateProduct($input: ProductInput!) {
  createProduct(input: $input) {
    success
    product {
      id
      article
      organization {
        id
        name
      }
    }
  }
}
```

#### Обработка заказов поставщиком:

```graphql
mutation ApproveSupplyOrder($orderId: ID!) {
  approveSupplyOrder(id: $orderId) {
    success
    order {
      id
      status
      organization {
        id
        name
      }
    }
  }
}

mutation RejectSupplyOrder($orderId: ID!, $reason: String) {
  rejectSupplyOrder(id: $orderId, reason: $reason) {
    success
    message
  }
}
```

#### Отгрузка заказов:

```graphql
mutation ShipSupplyOrder($orderId: ID!) {
  shipSupplyOrder(id: $orderId) {
    success
    order {
      id
      status # SHIPPED -> IN_TRANSIT
      organization {
        id
        name
      }
    }
  }
}
```

### 4.3 Правила партнерства

**КРИТИЧЕСКОЕ ПРАВИЛО**: Поставщики в формах берутся ТОЛЬКО из партнеров с типом `WHOLESALE`

```typescript
// ✅ ПРАВИЛЬНО
const suppliers = await useQuery(GET_MY_COUNTERPARTIES, {
  variables: { type: 'WHOLESALE' },
})

// ❌ НЕПРАВИЛЬНО
const suppliers = await useQuery(GET_SUPPLY_SUPPLIERS)
```

> 📖 **Система партнерства**: См. [rules-complete.md#13-система-партнерства-и-контрагентов](./rules-complete.md#13--система-партнерства-и-контрагентов)

## 5. 📁 ТЕХНИЧЕСКИЕ КОМПОНЕНТЫ

> 📖 **Архитектура рынков**: См. [rules-complete.md#10-кабинет-поставщика](./rules-complete.md#10--кабинет-поставщика) для бизнес-логики принадлежности к рынкам

### 5.1 Расположение компонентов

```
src/components/
├── warehouse/              # Компоненты склада
│   ├── warehouse-dashboard.tsx
│   ├── product-card.tsx
│   ├── product-form.tsx
│   └── warehouse-statistics.tsx
├── supplier-orders/        # Компоненты заказов
│   ├── supplier-orders-dashboard.tsx
│   ├── supplier-order-card.tsx
│   └── supplier-orders-tabs.tsx
└── economics/              # Экономика
    └── wholesale-economics-page.tsx
```

### 5.2 Страницы (Pages)

```
src/app/
├── warehouse/
│   └── page.tsx           # Страница склада
├── supplier-orders/
│   └── page.tsx           # Страница заказов
└── [общие страницы]       # См. rules-complete.md
```

## 6. 🚨 ТЕХНИЧЕСКИЕ ПРАВИЛА И ОГРАНИЧЕНИЯ

> 📖 **Workflow поставок**: См. [rules-complete.md#5-workflow-поставок](./rules-complete.md#5--workflow-поставок) для бизнес-процессов

### 6.1 Обязательные проверки:

- Проверка типа организации: `organization.type === 'WHOLESALE'`
- Валидация прав доступа на уровне GraphQL резолверов
- Контроль остатков при подтверждении заказов

### 6.2 Правила безопасности доступа:

#### Контроль на уровне компонентов:

```typescript
{user?.organization?.type === "WHOLESALE" && (
  <WarehouseDashboard />
)}
```

#### Проверки в GraphQL резолверах:

```typescript
// Проверка что пользователь - поставщик
if (context.user.organization.type !== 'WHOLESALE') {
  throw new Error('Access denied: Wholesale access required')
}

// Проверка доступа к своим товарам
const product = await prisma.product.findFirst({
  where: {
    id: productId,
    organizationId: context.user.organizationId,
  },
})
```

### 6.3 Запрещено:

- Создавать товары с типами `DEFECT` или `FINISHED_PRODUCT`
- Изменять статусы заказов минуя workflow
- Показывать данные других поставщиков

> 📖 **Критические запреты**: См. [rules-complete.md#17-критические-запреты](./rules-complete.md#17--критические-запреты)

---

**Последнее обновление**: Декабрь 2024
**Связанные файлы**:

- [rules-complete.md](./rules-complete.md) - Общие бизнес-правила
- [visual-design-rules.md](./visual-design-rules.md) - Визуальные правила
