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

11 KiB
Raw Blame History

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<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 Поисковый интерфейс

<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

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

  • "Садовод" (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-кабинет-поставщика для правил создания товаров, обязательных полей и статистики

4. 🛠️ GRAPHQL API

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

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

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

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

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

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

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

4.2 Мутации (Mutations)

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

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

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

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
  }
}

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

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

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

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

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

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

📖 Система партнерства: См. rules-complete.md#13-система-партнерства-и-контрагентов

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

📖 Архитектура рынков: См. 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-поставок для бизнес-процессов

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

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

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

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

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

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

// Проверка что пользователь - поставщик
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-критические-запреты


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