# ПРАВИЛА КАБИНЕТА ЛОГИСТИКИ (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
{/* Основная информация */}
Заявка #{request.number}
{request.fromLocation} → {request.toLocation}
{/* Статус */}
{getStatusLabel(request.status)}
{/* Детали доставки */}
Вес:
{request.weight} кг
Объем:
{request.volume} м³
```
### 2.3 Интерфейс отслеживания
```jsx
Статус доставки
В пути
{/* Прогресс доставки */}
{deliverySteps.map((step, index) => (
{step.completed ? '✓' : index + 1}
))}
```
## 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
Расчет стоимости доставки
Объем груза:
{volume} м³
Базовый тариф:
{volume <= 1 ? tariffUnder1m3 : tariffOver1m3} ₽/м³
Итого:
{calculateTotal(volume, tariff)} ₽
```
### 3.4 Управление заявками
**РАЗДЕЛЫ КАБИНЕТА ЛОГИСТИКИ**:
- **НОВЫЕ ЗАЯВКИ** - поступившие заявки на доставку
- **В РАБОТЕ** - принятые к исполнению заявки
- **ВЫПОЛНЕННЫЕ** - завершенные доставки
- **ОТКЛОНЕННЫЕ** - заявки, которые не могут быть выполнены
**ИНФОРМАЦИЯ О ЗАЯВКЕ**:
- Детали груза (объем, вес, габариты)
- Маршрут доставки (откуда - куда)
- Срочность доставки
- Особые требования к транспортировке
- Контактная информация участников
#### Интерфейс управления заявками:
```jsx
Новые
{newCount}
В работе
{inProgressCount}
Выполненные
Отклоненные
{newRequests.map((request) => (
))}
```
## 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" && (
)}
```
#### Проверки в 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) - Визуальные правила