Объединены файлы правил системы в единую базу знаний v3.0 с устранением противоречий и дублирования. Создан rules-unified.md на основе rules.md, rules1.md и rules2.md с добавлением всех уникальных разделов. Обновлена терминология системы с соответствием реальной схеме БД (ТОВАР→PRODUCT, РАСХОДНИКИ→CONSUMABLE). Архивированы старые файлы правил в папку archive. Обновлены ссылки в CLAUDE.md и development-checklist.md на новый единый источник истины.
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -2,14 +2,24 @@
|
||||
|
||||
> ⚠️ **КРИТИЧЕСКИ ВАЖНО**: Этот чеклист ОБЯЗАТЕЛЕН к проверке перед любым изменением кода!
|
||||
|
||||
## 🔤 ТЕРМИНЫ СИСТЕМЫ
|
||||
> Для людей → `В коде`
|
||||
- ТОВАР → `PRODUCT`
|
||||
- РАСХОДНИКИ → `CONSUMABLE`
|
||||
- БРАК → `DEFECT` *(планируется)*
|
||||
- ПРОДУКТ → `FINISHED_PRODUCT` *(планируется)*
|
||||
|
||||
## 🔴 КРИТИЧЕСКИЕ ПРОВЕРКИ (НЕЛЬЗЯ НАРУШАТЬ)
|
||||
|
||||
### ✅ Типизация предметов
|
||||
|
||||
- [ ] Каждый предмет имеет один из 4 типов: ТОВАР, БРАК, РАСХОДНИКИ, ПРОДУКТ
|
||||
- [ ] Каждый предмет имеет один из типов: ТОВАР (`PRODUCT`), РАСХОДНИКИ (`CONSUMABLE`), БРАК и ПРОДУКТ (планируются)
|
||||
- [ ] БРАК и ПРОДУКТ имеют обязательную связь с родительским товаром (parentId)
|
||||
- [ ] Расходники создаются как универсальный тип, классифицируются при заказе
|
||||
- [ ] ТОВАР ≠ ПРОДУКТ (разные сущности в системе)
|
||||
- [ ] **В формах создания поставок товаров показываются ТОЛЬКО предметы типа ТОВАР** (`PRODUCT`)
|
||||
- [ ] **В формах создания поставок расходников показываются ТОЛЬКО предметы типа РАСХОДНИКИ** (`CONSUMABLE`)
|
||||
- [ ] **Фильтрация по типу предмета происходит на уровне GraphQL резолвера**, не на фронтенде
|
||||
|
||||
### ✅ Workflow статусов
|
||||
|
||||
@ -121,6 +131,35 @@
|
||||
- [ ] Документирование всех 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'`
|
||||
|
||||
## 🟢 РЕКОМЕНДУЕМЫЕ ПРОВЕРКИ
|
||||
|
||||
### ✅ Пользовательский опыт
|
||||
@ -147,6 +186,12 @@
|
||||
8. Нарушать последовательность статусов
|
||||
9. Игнорировать валидацию
|
||||
10. Нарушать последовательность модулей в статистике фулфилмента
|
||||
11. **Использовать неправильные имена полей GraphQL** (`getMyCounterparties` вместо `myCounterparties`)
|
||||
12. **Использовать GET_SUPPLY_SUPPLIERS для отображения поставщиков в формах** (только партнеры WHOLESALE)
|
||||
13. **Создавать интерфейсы TypeScript не соответствующие schema.prisma** (`sku`/`stock` вместо `article`/`quantity`)
|
||||
14. **Использовать общие запросы вместо специализированных** (`GET_ALL_PRODUCTS` вместо `GET_ORGANIZATION_PRODUCTS` для конкретного поставщика)
|
||||
15. **Показывать расходники в формах создания поставок товаров** (строгая типизация `PRODUCT`/`CONSUMABLE`)
|
||||
16. **Фильтровать предметы по типу на фронтенде** (фильтрация должна быть в GraphQL резолвере)
|
||||
|
||||
---
|
||||
|
||||
@ -174,5 +219,5 @@
|
||||
---
|
||||
|
||||
**ПРАВИЛО**: Перед каждым изменением кода проверить этот чеклист!
|
||||
**ИСТОЧНИК ИСТИНЫ**: rules2.md
|
||||
**ИСТОЧНИК ИСТИНЫ**: rules-unified.md (v4.0)
|
||||
**СТАТУС**: ОБЯЗАТЕЛЬНЫЙ К ВЫПОЛНЕНИЮ
|
||||
|
Reference in New Issue
Block a user