# ПРАВИЛА КАБИНЕТА ЛОГИСТИКИ (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}

{step.label}

{step.time}

))}
``` ## 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) - Визуальные правила