Объединены файлы правил системы в единую базу знаний 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:
Veronika Smirnova
2025-08-05 00:19:17 +03:00
parent 17ffd6c9ed
commit ee72a9488b
21 changed files with 9147 additions and 174 deletions

View File

@ -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)
**СТАТУС**: ОБЯЗАТЕЛЬНЫЙ К ВЫПОЛНЕНИЮ