Files
sfera/logist-cabinet-rules.md
Veronika Smirnova af16402f22 Создание 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>
2025-08-08 17:05:59 +03:00

514 lines
17 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.

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