Создание logist-cabinet-rules.md и оптимизация rules-complete.md

## Что создано:
- logist-cabinet-rules.md - технические правила кабинета логистики по стандартизированной структуре
- Добавлена система тарификации с примерами UI
- Интерфейсы управления заявками и отслеживания доставок
- GraphQL API для логистики (queries, mutations, subscriptions)

## Что изменено в rules-complete.md:
- Раздел 12 "Кабинет логистики" сокращен до краткого описания со ссылкой на специализированный файл
- Убрано ~80 строк дублирующего контента
- Сохранена вся бизнес-логика workflow и статусов

## Что обновлено в CLAUDE.md:
- Добавлен logist-cabinet-rules.md в список кабинет-специфичных правил
- Добавлены автоматические триггеры для логистических задач

Файл следует стандартизированной структуре wholesale-cabinet-rules.md и обеспечивает модульность системы правил.

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-08-08 17:05:59 +03:00
parent b72ac42173
commit af16402f22
3 changed files with 523 additions and 82 deletions

View File

@ -9,6 +9,7 @@
### Специфичные правила по кабинетам: ### Специфичные правила по кабинетам:
- **`wholesale-cabinet-rules.md`** - при работе с кабинетом поставщика - **`wholesale-cabinet-rules.md`** - при работе с кабинетом поставщика
- **`logist-cabinet-rules.md`** - при работе с кабинетом логистики
- **`visual-design-rules.md`** - при работе с UI/UX - **`visual-design-rules.md`** - при работе с UI/UX
### Правила взаимодействия: ### Правила взаимодействия:
@ -18,6 +19,7 @@
### Автоматическая активация: ### Автоматическая активация:
- Упоминание "поставщик", "wholesale", "/warehouse", "/supplier-orders" → читать wholesale-cabinet-rules.md - Упоминание "поставщик", "wholesale", "/warehouse", "/supplier-orders" → читать wholesale-cabinet-rules.md
- Упоминание "логистика", "доставка", "logist", "/logistics-requests", "/routes" → читать logist-cabinet-rules.md
- Упоминание "дизайн", "UI", "компонент", "стиль" → читать visual-design-rules.md - Упоминание "дизайн", "UI", "компонент", "стиль" → читать visual-design-rules.md
## 🚨 ЕДИНСТВЕННЫЙ ИСТОЧНИК ПРАВИЛ ## 🚨 ЕДИНСТВЕННЫЙ ИСТОЧНИК ПРАВИЛ

513
logist-cabinet-rules.md Normal file
View File

@ -0,0 +1,513 @@
# ПРАВИЛА КАБИНЕТА ЛОГИСТИКИ (LOGIST)
> ⚠️ **ВАЖНО**: Это файл с техническими деталями кабинета логистики.
> Общие бизнес-правила находятся в **[rules-complete.md](./rules-complete.md)**
## Когда использовать этот файл:
- Работа с компонентами `/logistics-requests`, `/routes`
- GraphQL запросы для логистики
- UI/UX специфика кабинета логистики
- Технические детали реализации доставок
## 1. 🚚 СТРУКТУРА КАБИНЕТА ЛОГИСТИКИ
### 1.1 Основные разделы
**ЛОГИСТИКА (`LOGIST`)** имеет доступ к следующим разделам:
- **Заявки** (`/logistics-requests`) - управление заявками на доставку
- **Маршруты** (`/routes`) - планирование маршрутов
- **В пути** (`/in-transit`) - отслеживание грузов
- **История** (`/delivery-history`) - архив доставок
- **Партнеры** (`/partners`) - управление контрагентами
- **Мессенджер** (`/messenger`) - связь с партнерами
- **Настройки** (`/settings`) - профиль и настройки
- **Экономика** (`/economics`) - финансовая аналитика
### 1.2 Навигация и роутинг
#### При входе в систему:
```typescript
switch (user?.organization?.type) {
case 'LOGIST':
router.push('/logistics-requests') // Направляем на страницу заявок
break
}
```
#### Специальная логика роутинга:
> 📖 **Бизнес-логика роутинга**: См. [rules-complete.md#4-система-ролей-и-доступов](./rules-complete.md#4--система-ролей-и-доступов)
## 2. 🎨 UI/UX КОМПОНЕНТЫ
### 2.1 Dashboard компоненты
#### Основные компоненты кабинета:
- `LogisticsRequestsDashboard` - главный компонент заявок
- `RoutesManager` - управление маршрутами
- `DeliveryTracker` - отслеживание доставок
- `LogisticsEconomicsPage` - экономическая аналитика
#### Wrapper-компоненты:
- `HomePageWrapper` - маршрутизация по типам организаций
- `EconomicsPageWrapper` - адаптивная экономика по кабинетам
#### Специализированные компоненты:
- `LogisticsRequestCard` - карточка заявки на доставку
- `RouteCard` - карточка маршрута
- `DeliveryStatusTracker` - трекер статуса доставки
- `LogisticsStats` - статистика доставок
### 2.2 Карточка заявки на доставку
#### Структура карточки:
```jsx
<div className="logistics-request-card glass-card">
<div className="flex items-start justify-between">
{/* Основная информация */}
<div className="flex-1">
<h4 className="text-white font-medium">Заявка #{request.number}</h4>
<p className="text-white/60 text-sm mt-1">
{request.fromLocation} {request.toLocation}
</p>
</div>
{/* Статус */}
<Badge className={getStatusColor(request.status)}>{getStatusLabel(request.status)}</Badge>
</div>
{/* Детали доставки */}
<div className="mt-4 space-y-2">
<div className="flex justify-between text-sm">
<span className="text-white/60">Вес:</span>
<span className="text-white">{request.weight} кг</span>
</div>
<div className="flex justify-between text-sm">
<span className="text-white/60">Объем:</span>
<span className="text-white">{request.volume} м³</span>
</div>
</div>
</div>
```
### 2.3 Интерфейс отслеживания
```jsx
<div className="delivery-tracker">
<div className="flex items-center justify-between mb-4">
<h3 className="text-white font-semibold">Статус доставки</h3>
<Badge className="bg-yellow-500/20 text-yellow-300">В пути</Badge>
</div>
{/* Прогресс доставки */}
<div className="relative">
<div className="absolute left-4 top-0 bottom-0 w-0.5 bg-white/20"></div>
{deliverySteps.map((step, index) => (
<div key={step.id} className="flex items-center gap-4 mb-4">
<div
className={`
w-8 h-8 rounded-full flex items-center justify-center
${step.completed ? 'bg-green-500' : 'bg-white/10'}
`}
>
{step.completed ? '✓' : index + 1}
</div>
<div>
<p className="text-white text-sm">{step.label}</p>
<p className="text-white/60 text-xs">{step.time}</p>
</div>
</div>
))}
</div>
</div>
```
## 3. 📊 ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ
> 📖 **Бизнес-правила**: См. [rules-complete.md#12-кабинет-логистики](./rules-complete.md#12--кабинет-логистики) для правил workflow и процессов
### 3.1 Основные функции логистики
**РОЛЬ В СИСТЕМЕ**: Управление доставками и транспортировкой
**КЛЮЧЕВЫЕ ФУНКЦИИ**:
- **ПОДТВЕРЖДЕНИЕ**: Возможности доставки поставок
- **ПЛАНИРОВАНИЕ**: Оптимальных маршрутов
- **УПРАВЛЕНИЕ**: Транспортом и водителями
- **ОТСЛЕЖИВАНИЕ**: Мониторинг грузов в пути
### 3.2 Workflow для логистики
#### **ЭТАП 1: Получение заявки**
1. Логистика получает уведомление о новой поставке
2. Заявка появляется в разделе "Заявки" кабинета логистики
3. Логист изучает детали поставки (объем, вес, маршрут)
#### **ЭТАП 2: Подтверждение доставки**
4. Логист нажимает кнопку "Одобрить"
5. Статус поставки меняется на `LOGISTICS_CONFIRMED`
6. Уведомления отправляются всем участникам
#### **ЭТАП 3: Получение груза**
7. Логистика приезжает к поставщику
8. Поставщик передает товар и документы
9. В системе отмечается "Груз получен"
10. Статус меняется на `IN_TRANSIT`
#### **ЭТАП 4: Доставка**
11. Логистика доставляет товар на фулфилмент-центр
12. В кабинете логистики нажимают "Доставлено"
13. Фулфилмент принимает товар и отмечает "Принято"
### 3.3 Система тарификации
**ПАРАМЕТРЫ ТАРИФИКАЦИИ**:
- **Тариф до 1м³** - базовая стоимость для малых грузов
- **Тариф свыше 1м³** - стоимость для крупных грузов
- **Маршруты доставки** - от точки отправления до точки назначения
- **Описание услуг** - дополнительные условия доставки
**РАСЧЕТ СТОИМОСТИ**:
- Автоматический расчет стоимости доставки по объему груза
- Отображение примерной стоимости при создании заказа
- Учет специфики маршрута и условий доставки
#### Пример интерфейса тарификации:
```jsx
<div className="tariff-calculator glass-card p-4">
<h3 className="text-white font-semibold mb-4">Расчет стоимости доставки</h3>
<div className="space-y-3">
<div className="flex justify-between">
<span className="text-white/60">Объем груза:</span>
<span className="text-white font-medium">{volume} м³</span>
</div>
<div className="flex justify-between">
<span className="text-white/60">Базовый тариф:</span>
<span className="text-white">{volume <= 1 ? tariffUnder1m3 : tariffOver1m3} /м³</span>
</div>
<div className="border-t border-white/10 pt-3">
<div className="flex justify-between text-lg">
<span className="text-white font-semibold">Итого:</span>
<span className="text-green-400 font-bold">{calculateTotal(volume, tariff)} </span>
</div>
</div>
</div>
</div>
```
### 3.4 Управление заявками
**РАЗДЕЛЫ КАБИНЕТА ЛОГИСТИКИ**:
- **НОВЫЕ ЗАЯВКИ** - поступившие заявки на доставку
- **В РАБОТЕ** - принятые к исполнению заявки
- **ВЫПОЛНЕННЫЕ** - завершенные доставки
- **ОТКЛОНЕННЫЕ** - заявки, которые не могут быть выполнены
**ИНФОРМАЦИЯ О ЗАЯВКЕ**:
- Детали груза (объем, вес, габариты)
- Маршрут доставки (откуда - куда)
- Срочность доставки
- Особые требования к транспортировке
- Контактная информация участников
#### Интерфейс управления заявками:
```jsx
<Tabs defaultValue="new" className="w-full">
<TabsList className="grid w-full grid-cols-4 bg-white/5">
<TabsTrigger value="new" className="data-[state=active]:bg-white/10">
Новые
<Badge className="ml-2 bg-blue-500/20">{newCount}</Badge>
</TabsTrigger>
<TabsTrigger value="in-progress" className="data-[state=active]:bg-white/10">
В работе
<Badge className="ml-2 bg-yellow-500/20">{inProgressCount}</Badge>
</TabsTrigger>
<TabsTrigger value="completed" className="data-[state=active]:bg-white/10">
Выполненные
</TabsTrigger>
<TabsTrigger value="rejected" className="data-[state=active]:bg-white/10">
Отклоненные
</TabsTrigger>
</TabsList>
<TabsContent value="new" className="mt-4">
<div className="grid gap-4">
{newRequests.map((request) => (
<LogisticsRequestCard key={request.id} request={request} />
))}
</div>
</TabsContent>
</Tabs>
```
## 4. 🛠️ GRAPHQL API
### 4.1 Основные запросы (Queries)
#### Получение заявок на доставку:
```graphql
query GetLogisticsRequests {
logisticsRequests(where: { status: PENDING }) {
id
number
fromLocation
toLocation
weight
volume
status
supply {
id
totalAmount
organization {
name # Заказчик
}
}
}
}
```
#### Получение активных маршрутов:
```graphql
query GetActiveRoutes {
routes(where: { status: ACTIVE }) {
id
name
driver {
name
phone
}
deliveries {
id
status
estimatedTime
}
}
}
```
#### Получение статистики:
```graphql
query GetLogisticsStats {
logisticsStats {
totalDeliveries
activeDeliveries
completedToday
averageDeliveryTime
onTimeRate
}
}
```
### 4.2 Мутации (Mutations)
#### Подтверждение доставки:
```graphql
mutation ConfirmLogistics($supplyId: ID!) {
confirmLogistics(supplyId: $supplyId) {
success
supply {
id
status # Изменится на LOGISTICS_CONFIRMED
}
}
}
```
#### Обновление статуса доставки:
```graphql
mutation UpdateDeliveryStatus($deliveryId: ID!, $status: DeliveryStatus!) {
updateDeliveryStatus(id: $deliveryId, status: $status) {
success
delivery {
id
status
updatedAt
}
}
}
```
#### Создание маршрута:
```graphql
mutation CreateRoute($input: RouteInput!) {
createRoute(input: $input) {
success
route {
id
name
driver {
id
name
}
deliveries {
id
fromLocation
toLocation
}
}
}
}
```
### 4.3 Подписки (Subscriptions)
```graphql
subscription DeliveryTracking($deliveryId: ID!) {
deliveryUpdates(deliveryId: $deliveryId) {
id
status
currentLocation
estimatedArrival
events {
type
timestamp
description
}
}
}
```
## 5. 📁 ТЕХНИЧЕСКИЕ КОМПОНЕНТЫ
### 5.1 Расположение компонентов
```
src/components/
├── logistics/ # Компоненты логистики
│ ├── logistics-requests-dashboard.tsx
│ ├── logistics-request-card.tsx
│ ├── route-manager.tsx
│ └── delivery-tracker.tsx
├── routes/ # Компоненты маршрутов
│ ├── route-card.tsx
│ ├── route-planner.tsx
│ └── driver-assignment.tsx
└── economics/ # Экономика
└── logistics-economics-page.tsx
```
### 5.2 Страницы (Pages)
```
src/app/
├── logistics-requests/
│ └── page.tsx # Страница заявок
├── routes/
│ └── page.tsx # Страница маршрутов
├── in-transit/
│ └── page.tsx # Активные доставки
└── delivery-history/
└── page.tsx # История доставок
```
## 6. 🚨 ТЕХНИЧЕСКИЕ ПРАВИЛА И ОГРАНИЧЕНИЯ
> 📖 **Workflow поставок**: См. [rules-complete.md#5-workflow-поставок](./rules-complete.md#5--workflow-поставок) для бизнес-процессов
### 6.1 Обязательные проверки:
- Проверка типа организации: `organization.type === 'LOGIST'`
- Валидация прав доступа на уровне GraphQL резолверов
- Проверка возможности доставки (вес, объем, расстояние)
- Контроль статусов перед изменением
### 6.2 Правила безопасности доступа:
#### Контроль на уровне компонентов:
```typescript
{user?.organization?.type === "LOGIST" && (
<LogisticsRequestsDashboard />
)}
```
#### Проверки в GraphQL резолверах:
```typescript
// Проверка что пользователь - логистика
if (context.user.organization.type !== 'LOGIST') {
throw new Error('Access denied: Logistics access required')
}
// Проверка доступа к заявкам
const request = await prisma.logisticsRequest.findFirst({
where: {
id: requestId,
organizationId: context.user.organizationId,
},
})
```
### 6.3 Запрещено:
- Изменять статусы поставок минуя workflow
- Подтверждать доставки без физического получения груза
- Показывать данные других логистических компаний
- Изменять данные после завершения доставки
### 6.4 Правила статусов доставки:
- `LOGISTICS_CONFIRMED` → только после проверки возможности
- `IN_TRANSIT` → только после физического получения груза
- `DELIVERED` → требует подтверждения от фулфилмента
### 6.5 Правила логистики
**ОБЯЗАТЕЛЬНО**:
- Своевременное подтверждение заявок
- Соблюдение сроков доставки
- Бережная транспортировка товаров
- Уведомление о статусе доставки
- Документальное оформление приема/передачи груза
**ЗАПРЕЩЕНО**:
- Принятие заявок без подтверждения возможности выполнения
- Нарушение сроков доставки без уведомления
- Повреждение товаров при транспортировке
- Передача груза без документального оформления
- Изменение маршрута без согласования
**ИНТЕГРАЦИЯ С ПАРТНЕРАМИ**:
- Логистика видит только партнеров-поставщиков и фулфилмент-центры
- Выбор логистики осуществляется из списка партнеров типа `LOGIST`
- Все взаимодействия фиксируются в системе уведомлений
> 📖 **Критические запреты**: См. [rules-complete.md#17-критические-запреты](./rules-complete.md#17--критические-запреты)
---
**Последнее обновление**: Август 2025
**Связанные файлы**:
- [rules-complete.md](./rules-complete.md) - Общие бизнес-правила
- [visual-design-rules.md](./visual-design-rules.md) - Визуальные правила

View File

@ -113,7 +113,7 @@
| ----------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------- | | ----------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------- |
| **Типы предметов** | [2](#2--типизация-предметов) | PRODUCT, CONSUMABLE, DEFECT, FINISHED_PRODUCT | | **Типы предметов** | [2](#2--типизация-предметов) | PRODUCT, CONSUMABLE, DEFECT, FINISHED_PRODUCT |
| **Кабинет фулфилмента** | [11](#11--кабинет-фулфилмента-полная-документация) | Склад, Услуги, Сотрудники, 6 модулей | | **Кабинет фулфилмента** | [11](#11--кабинет-фулфилмента-полная-документация) | Склад, Услуги, Сотрудники, 6 модулей |
| **Workflow поставок** | [5](#5--workflow-поставок) | 8 статусов, уведомления, логистика | | **Workflow поставок** | [5](#5--workflow-поставок) | 8 статусов, уведомления, роль логистики |
| **GraphQL запросы** | [18](#18--graphql-и-typescript-правила), [24](#24--технические-приложения) | Резолверы, мутации, типизация | | **GraphQL запросы** | [18](#18--graphql-и-typescript-правила), [24](#24--технические-приложения) | Резолверы, мутации, типизация |
| **Система партнерства** | [13](#13--система-партнерства-и-контрагентов) | Counterparty, WHOLESALE, заявки | | **Система партнерства** | [13](#13--система-партнерства-и-контрагентов) | Counterparty, WHOLESALE, заявки |
| **Рынки и маркет** | [10.1](#101-разделение-понятий-рынок-vs-маркет), [18.7](#187-правила-рынков-и-маркета) | РЫНОК ≠ МАРКЕТ, Organization.market | | **Рынки и маркет** | [10.1](#101-разделение-понятий-рынок-vs-маркет), [18.7](#187-правила-рынков-и-маркета) | РЫНОК ≠ МАРКЕТ, Organization.market |
@ -2309,90 +2309,16 @@ type Supply {
## 12. 🚚 КАБИНЕТ ЛОГИСТИКИ ## 12. 🚚 КАБИНЕТ ЛОГИСТИКИ
### 12.1 Основные функции логистики > 📖 **Технические детали кабинета**: См. [logist-cabinet-rules.md](./logist-cabinet-rules.md) для компонентов, GraphQL, UI/UX и всех технических деталей реализации
**РОЛЬ В СИСТЕМЕ**: Управление доставками и транспортировкой **КРАТКАЯ РОЛЬ В СИСТЕМЕ**: Управление доставками и транспортировкой
**ОСНОВНЫЕ ФУНКЦИИ**: **КЛЮЧЕВЫЕ ФУНКЦИИ**:
- **ПОДТВЕРЖДЕНИЕ ДОСТАВКИ**: Подтверждение возможности доставки поставок - Подтверждение возможности доставки поставок
- **ТРАНСПОРТИРОВКА**: Организация и выполнение доставки товаров - Организация и выполнение доставки товаров
- **КОНТРОЛЬ МАРШРУТОВ**: Управление логистическими маршрутами - Управление логистическими маршрутами
- **ОТСЛЕЖИВАНИЕ**: Мониторинг грузов в пути - Мониторинг грузов в пути
### 12.2 Workflow для логистики
#### **ЭТАП 1: Получение заявки**
1. Логистика получает уведомление о новой поставке
2. Заявка появляется в разделе "Заявки" кабинета логистики
3. Логист изучает детали поставки (объем, вес, маршрут)
#### **ЭТАП 2: Подтверждение доставки**
4. Логист нажимает кнопку "Одобрить"
5. Статус поставки меняется на `LOGISTICS_CONFIRMED`
6. Уведомления отправляются всем участникам
#### **ЭТАП 3: Забор товара**
7. Логист приезжает к поставщику за товаром
8. Поставщик отгружает товар логисту
9. Поставщик отмечает "Отправлено"
10. Статус меняется на `SHIPPED`, затем `IN_TRANSIT`
#### **ЭТАП 4: Доставка**
11. Логистика доставляет товар на фулфилмент-центр
12. В кабинете логистики нажимают "Доставлено"
13. Фулфилмент принимает товар и отмечает "Принято"
### 12.3 Система тарификации
**ПАРАМЕТРЫ ТАРИФИКАЦИИ**:
- **Тариф до 1м³** - базовая стоимость для малых грузов
- **Тариф свыше 1м³** - стоимость для крупных грузов
- **Маршруты доставки** - от точки отправления до точки назначения
- **Описание услуг** - дополнительные условия доставки
**РАСЧЕТ СТОИМОСТИ**:
- Автоматический расчет стоимости доставки по объему груза
- Отображение примерной стоимости при создании заказа
- Учет специфики маршрута и условий доставки
### 12.4 Управление заявками
**РАЗДЕЛЫ КАБИНЕТА ЛОГИСТИКИ**:
- **НОВЫЕ ЗАЯВКИ** - поступившие заявки на доставку
- **В РАБОТЕ** - принятые к исполнению заявки
- **ВЫПОЛНЕННЫЕ** - завершенные доставки
- **ОТКЛОНЕННЫЕ** - заявки, которые не могут быть выполнены
**ИНФОРМАЦИЯ О ЗАЯВКЕ**:
- Детали груза (объем, вес, габариты)
- Маршрут доставки (откуда - куда)
- Срочность доставки
- Особые требования к транспортировке
- Контактная информация участников
### 12.5 Правила логистики
**ОБЯЗАТЕЛЬНО**:
- Своевременное подтверждение заявок
- Соблюдение сроков доставки
- Бережная транспортировка товаров
- Уведомление о статусе доставки
**ЗАПРЕЩЕНО**:
- Принятие заявок без подтверждения возможности выполнения
- Нарушение сроков доставки без уведомления
- Повреждение товаров при транспортировке
--- ---