Files
sfera/wholesale-cabinet-rules.md
Veronika Smirnova 2b7f92772c Реструктуризация системы правил: создание модульной документации
- Разделение rules-complete.md на специализированные файлы
- Создание interaction-integrity-rules.md с методологией работы Claude Code
- Создание wholesale-cabinet-rules.md с техническими деталями кабинета поставщика
- Обновление CLAUDE.md с новой структурой навигации по правилам
- Добавление автоматических триггеров для различных типов задач

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-08 16:06:32 +03:00

337 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

# ПРАВИЛА КАБИНЕТА ПОСТАВЩИКА (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) - Визуальные правила