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

17 KiB
Raw Blame History

ПРАВИЛА КАБИНЕТА ЛОГИСТИКИ (LOGIST)

⚠️ ВАЖНО: Это файл с техническими деталями кабинета логистики. Общие бизнес-правила находятся в 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 Навигация и роутинг

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

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

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

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

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

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

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

  • LogisticsRequestsDashboard - главный компонент заявок
  • RoutesManager - управление маршрутами
  • DeliveryTracker - отслеживание доставок
  • LogisticsEconomicsPage - экономическая аналитика

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

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

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

  • LogisticsRequestCard - карточка заявки на доставку
  • RouteCard - карточка маршрута
  • DeliveryStatusTracker - трекер статуса доставки
  • LogisticsStats - статистика доставок

2.2 Карточка заявки на доставку

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

<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 Интерфейс отслеживания

<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-кабинет-логистики для правил workflow и процессов

3.1 Основные функции логистики

РОЛЬ В СИСТЕМЕ: Управление доставками и транспортировкой

КЛЮЧЕВЫЕ ФУНКЦИИ:

  • ПОДТВЕРЖДЕНИЕ: Возможности доставки поставок
  • ПЛАНИРОВАНИЕ: Оптимальных маршрутов
  • УПРАВЛЕНИЕ: Транспортом и водителями
  • ОТСЛЕЖИВАНИЕ: Мониторинг грузов в пути

3.2 Workflow для логистики

ЭТАП 1: Получение заявки

  1. Логистика получает уведомление о новой поставке
  2. Заявка появляется в разделе "Заявки" кабинета логистики
  3. Логист изучает детали поставки (объем, вес, маршрут)

ЭТАП 2: Подтверждение доставки

  1. Логист нажимает кнопку "Одобрить"
  2. Статус поставки меняется на LOGISTICS_CONFIRMED
  3. Уведомления отправляются всем участникам

ЭТАП 3: Получение груза

  1. Логистика приезжает к поставщику
  2. Поставщик передает товар и документы
  3. В системе отмечается "Груз получен"
  4. Статус меняется на IN_TRANSIT

ЭТАП 4: Доставка

  1. Логистика доставляет товар на фулфилмент-центр
  2. В кабинете логистики нажимают "Доставлено"
  3. Фулфилмент принимает товар и отмечает "Принято"

3.3 Система тарификации

ПАРАМЕТРЫ ТАРИФИКАЦИИ:

  • Тариф до 1м³ - базовая стоимость для малых грузов
  • Тариф свыше 1м³ - стоимость для крупных грузов
  • Маршруты доставки - от точки отправления до точки назначения
  • Описание услуг - дополнительные условия доставки

РАСЧЕТ СТОИМОСТИ:

  • Автоматический расчет стоимости доставки по объему груза
  • Отображение примерной стоимости при создании заказа
  • Учет специфики маршрута и условий доставки

Пример интерфейса тарификации:

<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 Управление заявками

РАЗДЕЛЫ КАБИНЕТА ЛОГИСТИКИ:

  • НОВЫЕ ЗАЯВКИ - поступившие заявки на доставку
  • В РАБОТЕ - принятые к исполнению заявки
  • ВЫПОЛНЕННЫЕ - завершенные доставки
  • ОТКЛОНЕННЫЕ - заявки, которые не могут быть выполнены

ИНФОРМАЦИЯ О ЗАЯВКЕ:

  • Детали груза (объем, вес, габариты)
  • Маршрут доставки (откуда - куда)
  • Срочность доставки
  • Особые требования к транспортировке
  • Контактная информация участников

Интерфейс управления заявками:

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

Получение заявок на доставку:

query GetLogisticsRequests {
  logisticsRequests(where: { status: PENDING }) {
    id
    number
    fromLocation
    toLocation
    weight
    volume
    status
    supply {
      id
      totalAmount
      organization {
        name # Заказчик
      }
    }
  }
}

Получение активных маршрутов:

query GetActiveRoutes {
  routes(where: { status: ACTIVE }) {
    id
    name
    driver {
      name
      phone
    }
    deliveries {
      id
      status
      estimatedTime
    }
  }
}

Получение статистики:

query GetLogisticsStats {
  logisticsStats {
    totalDeliveries
    activeDeliveries
    completedToday
    averageDeliveryTime
    onTimeRate
  }
}

4.2 Мутации (Mutations)

Подтверждение доставки:

mutation ConfirmLogistics($supplyId: ID!) {
  confirmLogistics(supplyId: $supplyId) {
    success
    supply {
      id
      status # Изменится на LOGISTICS_CONFIRMED
    }
  }
}

Обновление статуса доставки:

mutation UpdateDeliveryStatus($deliveryId: ID!, $status: DeliveryStatus!) {
  updateDeliveryStatus(id: $deliveryId, status: $status) {
    success
    delivery {
      id
      status
      updatedAt
    }
  }
}

Создание маршрута:

mutation CreateRoute($input: RouteInput!) {
  createRoute(input: $input) {
    success
    route {
      id
      name
      driver {
        id
        name
      }
      deliveries {
        id
        fromLocation
        toLocation
      }
    }
  }
}

4.3 Подписки (Subscriptions)

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-поставок для бизнес-процессов

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

  • Проверка типа организации: organization.type === 'LOGIST'
  • Валидация прав доступа на уровне GraphQL резолверов
  • Проверка возможности доставки (вес, объем, расстояние)
  • Контроль статусов перед изменением

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

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

{user?.organization?.type === "LOGIST" && (
  <LogisticsRequestsDashboard />
)}

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

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


Последнее обновление: Август 2025 Связанные файлы: