
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
15 KiB
15 KiB
ЧЕКЛИСТ РАЗРАБОТКИ - ОБЯЗАТЕЛЬНЫЕ ПРОВЕРКИ
⚠️ КРИТИЧЕСКИ ВАЖНО: Этот чеклист ОБЯЗАТЕЛЕН к проверке перед любым изменением кода!
🔤 ТЕРМИНЫ СИСТЕМЫ
Для людей →
В коде
- ТОВАР →
PRODUCT
- РАСХОДНИКИ →
CONSUMABLE
- БРАК →
DEFECT
(планируется) - ПРОДУКТ →
FINISHED_PRODUCT
(планируется)
🔴 КРИТИЧЕСКИЕ ПРОВЕРКИ (НЕЛЬЗЯ НАРУШАТЬ)
✅ Типизация предметов
- Каждый предмет имеет один из типов: ТОВАР (
PRODUCT
), РАСХОДНИКИ (CONSUMABLE
), БРАК и ПРОДУКТ (планируются) - БРАК и ПРОДУКТ имеют обязательную связь с родительским товаром (parentId)
- Расходники создаются как универсальный тип, классифицируются при заказе
- ТОВАР ≠ ПРОДУКТ (разные сущности в системе)
- В формах создания поставок товаров показываются ТОЛЬКО предметы типа ТОВАР (
PRODUCT
) - В формах создания поставок расходников показываются ТОЛЬКО предметы типа РАСХОДНИКИ (
CONSUMABLE
) - Фильтрация по типу предмета происходит на уровне GraphQL резолвера, не на фронтенде
✅ Workflow статусов
- Соблюдена последовательность: PENDING → SUPPLIER_APPROVED → CONFIRMED → LOGISTICS_CONFIRMED → SHIPPED → IN_TRANSIT → DELIVERED
- Нет пропуска промежуточных статусов
- Каждое изменение статуса сопровождается уведомлением
✅ Правила доступа
- Поставщик НЕ может добавлять собственные товары в корзину
- Заказ брака ЗАПРЕЩЕН
- Только активные предметы отображаются в маркете
- Проверка остатков перед добавлением в корзину
✅ Система фулфилмента
- Товары разделены на "на складе" и "в обработке"
- Модули статистики в правильной последовательности: ПРОДУКТ → ТОВАР → БРАК → ВОЗВРАТЫ → РАСХОДНИКИ СЕЛЛЕРОВ → РАСХОДНИКИ ФУЛФИЛМЕНТА
- Процесс создания продукта включает учет план/факт
✅ Система логистики
- Своевременное подтверждение заявок на доставку
- Соблюдение workflow логистики: получение заявки → подтверждение → забор → доставка
- Корректная работа системы тарификации (до 1м³ и свыше 1м³)
- Обязательные уведомления о статусе доставки
✅ Структура кабинетов
- Каждый тип кабинета имеет страницу "Главная" (РЕАЛИЗОВАНО)
- Страница "Главная" первая в sidebar навигации (РЕАЛИЗОВАНО)
- Условное отображение разделов по типу организации:
{user?.organization?.type === "TYPE" && (...)}
- Адаптивный роутинг для кнопок с разной логикой по типам кабинетов
- Роут
/home
с универсальным компонентом HomePageWrapper - 4 типо-зависимых компонента: SellerHomePage, FulfillmentHomePage, WholesaleHomePage, LogistHomePage
- Проверки доступа и безопасности в каждом компоненте
- Каждый кабинет имеет раздел "Экономика" (РЕАЛИЗОВАНО В СИСТЕМЕ)
- Разделы "Экономика" размещены перед настройками в каждом кабинете (РЕАЛИЗОВАНО)
- Пустые разделы-заглушки с пометкой "будет добавлен позже" (РЕАЛИЗОВАНО)
- Роут
/economics
с универсальным компонентом EconomicsPageWrapper (РЕАЛИЗОВАНО) - 4 типо-зависимых компонента экономики: SellerEconomicsPage, FulfillmentEconomicsPage, WholesaleEconomicsPage, LogistEconomicsPage (РЕАЛИЗОВАНО)
- Кнопка "Экономика" в sidebar навигации перед настройками (РЕАЛИЗОВАНО)
- Проверки доступа и безопасности в экономических компонентах (РЕАЛИЗОВАНО)
✅ Обязательные поля
- Название, артикул, цена > 0, тип предмета
- ИСКЛЮЧЕНИЕ: Цена брака может быть 0 для фулфилмента (себестоимость для селлера)
- Уникальность артикула в рамках организации
- Формат артикула: СФ-{ТИП}-{КОДКАТЕГОРИИ}-{КОДОРГАНИЗАЦИИ}-{TIMESTAMP}-{RANDOM}
- Товар имеет минимум одно изображение (ПРИМЕР АВТОСИНХРОНИЗАЦИИ)
🟡 ВАЖНЫЕ ПРОВЕРКИ
✅ Валидация данных
- Все числовые значения корректны (цена > 0, вес > 0)
- Количество в заказе не превышает остаток
- Проверка корректности дат (не прошедшие для поставок)
- Валидация количества: минимум 1 единица/комплект, максимум = остаток у поставщика
- Проверка в реальном времени при изменении количества
✅ Уведомления
- Автоматические уведомления при создании заказов
- Уведомления при изменении статусов всем участникам
- Логирование всех изменений
✅ Интеграции
- Синхронизация данных между модулями
- Корректная работа с API маркетплейсов
- Связь с модулем "Услуги" для расходников фулфилмента
💻 ТЕХНИЧЕСКИЕ ПРОВЕРКИ
✅ Пользовательский интерфейс
- Адаптивность интерфейса для всех устройств
- Индикаторы загрузки для длительных операций
- Подтверждение критических действий
- Время загрузки страницы не более 3 секунд
✅ Обработка ошибок
- Логирование всех ошибок с детальной информацией
- Понятные сообщения об ошибках для пользователя
- Автоматическое восстановление после сбоев
- Регулярное резервное копирование данных
✅ Производительность
- Пагинация для больших списков товаров
- Ленивая загрузка изображений
- Кэширование часто запрашиваемых данных
- Готовность к масштабированию
✅ Безопасность данных
- Шифрование чувствительных данных
- Аудит всех действий пользователей
- Контроль доступа на уровне API
- Соответствие требованиям GDPR
✅ Качество кода
- Покрытие тестами критической функциональности (минимум 80%)
- Следование принципам SOLID
- Документирование всех API методов
- Автоматическое тестирование при развертывании
✅ GraphQL и TypeScript
- Имена полей в коде соответствуют GraphQL схеме (
myCounterparties
, неgetMyCounterparties
) - Интерфейсы TypeScript соответствуют schema.prisma (
article
, неsku
;quantity
, неstock
) - При проблемах с GraphQL использовать
fetchPolicy: 'network-only'
для обхода кеша - Добавлять логирование при отладке GraphQL запросов
- Проверка что резолверы вызываются (логи сервера)
- Использовать специализированные запросы вместо общих (
GET_ORGANIZATION_PRODUCTS
вместоGET_ALL_PRODUCTS
для конкретного поставщика) - Обязательная фильтрация по типу предмета в резолверах (
PRODUCT
/CONSUMABLE
) - Параметр
organizationId
обязателен для запросов товаров конкретной организации
✅ Система партнерства
- Поставщики в формах берутся только из партнеров с типом
WHOLESALE
- Используется запрос
GET_MY_COUNTERPARTIES
с фильтрацией по типу - НЕ используется
GET_SUPPLY_SUPPLIERS
для отображения поставщиков в формах - Партнерство создается двумя способами: через заказ в маркете или через раздел "Партнеры"
- Двусторонние записи в таблице
Counterparty
при создании партнерства
✅ Архитектурные принципы GraphQL
- Создавать специализированные резолверы для каждого контекста использования
- Использовать параметризованные запросы (
organizationId
,type
,search
) вместо фильтрации на фронтенде - Добавлять подробное логирование в резолверы для отладки (входные параметры, результаты фильтрации)
- Типы запросов должны отражать бизнес-логику:
organizationProducts
для товаров конкретной организации - Значения по умолчанию в резолверах для критических параметров (
type: args.type || "PRODUCT"
) - Валидация обязательных параметров на уровне схемы (
organizationId: ID!
) - Кеширование обходить при проблемах через
fetchPolicy: 'network-only'
🟢 РЕКОМЕНДУЕМЫЕ ПРОВЕРКИ
✅ Пользовательский опыт
- Адаптивность интерфейса
- Индикаторы загрузки
- Понятные сообщения об ошибках
✅ Производительность
- Пагинация для больших списков
- Ленивая загрузка изображений
- Кэширование данных
❌ АБСОЛЮТНО ЗАПРЕЩЕНО
- Удалять предметы с существующими заказами
- Изменять статусы без уведомлений
- Обходить проверки остатков
- Давать доступ к чужим данным
- Создавать брак/продукт без связи с родительским товаром
- Создавать отдельные типы расходников
- Разрешать заказ брака
- Нарушать последовательность статусов
- Игнорировать валидацию
- Нарушать последовательность модулей в статистике фулфилмента
- Использовать неправильные имена полей GraphQL (
getMyCounterparties
вместоmyCounterparties
) - Использовать GET_SUPPLY_SUPPLIERS для отображения поставщиков в формах (только партнеры WHOLESALE)
- Создавать интерфейсы TypeScript не соответствующие schema.prisma (
sku
/stock
вместоarticle
/quantity
) - Использовать общие запросы вместо специализированных (
GET_ALL_PRODUCTS
вместоGET_ORGANIZATION_PRODUCTS
для конкретного поставщика) - Показывать расходники в формах создания поставок товаров (строгая типизация
PRODUCT
/CONSUMABLE
) - Фильтровать предметы по типу на фронтенде (фильтрация должна быть в GraphQL резолвере)
🤔 ПРАВИЛО УТОЧНЕНИЙ
КРИТИЧЕСКИ ВАЖНО: Если я не уверен в выполнении задачи или вижу противоречия в правилах - ОБЯЗАТЕЛЬНО уточнить у пользователя!
❓ КОГДА УТОЧНЯТЬ:
- Недостаточно информации для правильного выполнения
- Вижу противоречия между правилами
- Задача может нарушить критические правила
- Неясно как применить правило в конкретной ситуации
- Есть сомнения в интерпретации требований
📝 КАК УТОЧНЯТЬ:
- Четко сформулировать что именно неясно
- Указать какие правила/требования конфликтуют
- Предложить варианты решения если возможно
- Запросить конкретные уточнения
❌ НИКОГДА не делать предположений если есть сомнения!
ПРАВИЛО: Перед каждым изменением кода проверить этот чеклист! ИСТОЧНИК ИСТИНЫ: rules-unified.md (v4.0) СТАТУС: ОБЯЗАТЕЛЬНЫЙ К ВЫПОЛНЕНИЮ