diff --git a/CLAUDE.md b/CLAUDE.md index bd1695f..2600aee 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -34,6 +34,45 @@ - Упоминание "дизайн", "UI", "компонент", "стиль" → legacy-rules/visual-design-rules.md - Упоминание "компонент", "создание", "dashboard", ">500 строк", "архитектура" → MODULAR_ARCHITECTURE_PATTERN.md +## 🛑 ЗАПРЕТ ПРЕДПОЛОЖЕНИЙ + +**КРИТИЧЕСКИ ВАЖНО:** При любой неоднозначности в запросе - ОСТАНОВИТЬСЯ немедленно и уточнить. + +### ОБЯЗАТЕЛЬНЫЙ АЛГОРИТМ ПРИ НЕОДНОЗНАЧНОСТИ: + +1. **СТОП-СИГНАЛ**: Если можно понять запрос двумя или более способами +2. **НЕМЕДЛЕННАЯ ОСТАНОВКА**: Прекратить любые действия +3. **ОБЯЗАТЕЛЬНЫЙ ВОПРОС**: "Не уверен. Уточните, пожалуйста:" +4. **ПЕРЕЧИСЛИТЬ ВАРИАНТЫ**: Показать все возможные понимания +5. **ДОЖДАТЬСЯ ОТВЕТА**: Не предпринимать действий до получения четкого указания + +### ПРИМЕРЫ СТОП-СИГНАЛОВ: + +- Упоминание "таблица поставщика" - КАКАЯ именно таблица? В каком файле? +- "Удали колонку" - ИЗ КАКОЙ таблицы? Какой компонент? +- "Исправь ошибку" - КАКУЮ ошибку? В каком файле? +- "Добавь функцию" - В КАКОЙ файл? Какая именно функция? + +### ЗАПРЕЩЕННЫЕ ФРАЗЫ: + +❌ "Возможно, вы имеете в виду..." +❌ "Скорее всего, нужно..." +❌ "Попробую в этом файле..." +❌ "Наверное, это..." + +### ОБЯЗАТЕЛЬНЫЕ ФРАЗЫ: + +✅ "Не уверен. Уточните, пожалуйста:" +✅ "Какой именно файл/компонент?" +✅ "Вы имеете в виду X или Y?" +✅ "Правильно ли я понимаю, что..." + +### НАКАЗАНИЕ ЗА НАРУШЕНИЕ: + +- Откат ВСЕХ изменений через комментарии +- Полная остановка работы до получения уточнений +- Начало заново с правильных вопросов + ## 🚨 ПЕРЕХОД К НОВОЙ АРХИТЕКТУРЕ ПРАВИЛ **ВАЖНО:** Система правил реорганизована для соответствия архитектуре кода: diff --git a/AUDIT_REPORT_DOCUMENTATION.md b/docs-and-reports/AUDIT_REPORT_DOCUMENTATION.md similarity index 100% rename from AUDIT_REPORT_DOCUMENTATION.md rename to docs-and-reports/AUDIT_REPORT_DOCUMENTATION.md diff --git a/MODULARIZATION_LOG.md b/docs-and-reports/MODULARIZATION_LOG.md similarity index 100% rename from MODULARIZATION_LOG.md rename to docs-and-reports/MODULARIZATION_LOG.md diff --git a/PLAN_MISSING_DOCUMENTATION.md b/docs-and-reports/PLAN_MISSING_DOCUMENTATION.md similarity index 100% rename from PLAN_MISSING_DOCUMENTATION.md rename to docs-and-reports/PLAN_MISSING_DOCUMENTATION.md diff --git a/docs/api-layer/GRAPHQL_SCHEMA_RULES.md b/docs/api-layer/GRAPHQL_SCHEMA_RULES.md index 0433324..adb8046 100644 --- a/docs/api-layer/GRAPHQL_SCHEMA_RULES.md +++ b/docs/api-layer/GRAPHQL_SCHEMA_RULES.md @@ -625,7 +625,7 @@ query GetMyCounterparties($type: OrganizationType) { ### МУТАЦИИ ПОСТАВЩИКОВ: ```graphql -# Одобрение заказа поставщиком с опциональными полями упаковки +# Одобрение заказа поставщиком с дополнительными параметрами поставки mutation SupplierApproveOrder( $orderId: ID! $packagesCount: Int @@ -635,23 +635,25 @@ mutation SupplierApproveOrder( ) { supplierApproveOrder( id: $orderId - packagesCount: $packagesCount # Опционально: для логистических расчетов - volume: $volume # Опционально: для планирования логистики - readyDate: $readyDate # Опционально: дата готовности к отгрузке - notes: $notes # Опционально: комментарии + packagesCount: $packagesCount # Параметр поставки: количество грузовых мест + volume: $volume # Параметр поставки: объем груза + readyDate: $readyDate # Параметр поставки: дата готовности к отгрузке + notes: $notes # Параметр поставки: дополнительная информация ) { success message order { id status # PENDING → SUPPLIER_APPROVED + deliveryDate # Основной параметр поставки + totalAmount # Ключевой параметр поставки - общая стоимость + totalItems # Параметр поставки - количество товаров organization { id name } - totalAmount - packagesCount # null если не указано - volume # null если не указано + packagesCount # Параметр поставки (опционально) + volume # Параметр поставки (опционально) readyDate # null если не указано notes # null если не указано } diff --git a/EXCHANGE_MODULE_IMPLEMENTATION_RULES.md b/docs/business-processes/EXCHANGE_MODULE_RULES.md similarity index 100% rename from EXCHANGE_MODULE_IMPLEMENTATION_RULES.md rename to docs/business-processes/EXCHANGE_MODULE_RULES.md diff --git a/docs/business-processes/SUPPLY_DATA_SECURITY_RULES.md b/docs/business-processes/SUPPLY_DATA_SECURITY_RULES.md index 266bf9f..a90d0d9 100644 --- a/docs/business-processes/SUPPLY_DATA_SECURITY_RULES.md +++ b/docs/business-processes/SUPPLY_DATA_SECURITY_RULES.md @@ -36,7 +36,7 @@ interface SupplyOrder { sellerConsumables: Supply[] // Расходники селлера } - // Упаковочная информация (опциональная) + // Параметры поставки (опциональные) packagesCount?: number // Количество грузовых мест volume?: number // Объем груза в м³ readyDate?: Date // Дата готовности к отгрузке @@ -567,7 +567,7 @@ export class CommercialDataAudit { "quantity": 10 // ❌ НЕ видит recipe }], - "packagesCount": 2, // ✅ Видит упаковочную информацию + "packagesCount": 2, // ✅ Видит параметры поставки "volume": 0.5, // ❌ НЕ видит totalAmount, услуги ФФ, логистику } diff --git a/docs/business-processes/SUPPLY_PARAMETERS_RULES.md b/docs/business-processes/SUPPLY_PARAMETERS_RULES.md new file mode 100644 index 0000000..4968767 --- /dev/null +++ b/docs/business-processes/SUPPLY_PARAMETERS_RULES.md @@ -0,0 +1,302 @@ +# ПРАВИЛА ПАРАМЕТРОВ ПОСТАВКИ + +## 📋 **ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ ПОСТАВКИ** + +**Параметры поставки** - это все характеристики и данные, которые описывают конкретную поставку товаров в системе SFERA. + +## 🎯 **КЛАССИФИКАЦИЯ ПАРАМЕТРОВ ПОСТАВКИ** + +### **1. ОБЯЗАТЕЛЬНЫЕ ПАРАМЕТРЫ:** +- **`id`** - Уникальный идентификатор поставки +- **`deliveryDate`** - Дата поставки (когда товары должны быть доставлены) +- **`totalAmount`** - Общая стоимость поставки +- **`totalItems`** - Количество товаров в поставке +- **`organizationId`** - Идентификатор заказчика +- **`partnerId`** - Идентификатор поставщика +- **`status`** - Статус поставки (PENDING, APPROVED, SHIPPED и т.д.) + +### **2. ЦЕНОВЫЕ ПАРАМЕТРЫ:** +- **`totalAmount`** - Общая сумма поставки +- **`goodsPrice`** - Стоимость товаров (расчетное поле) +- **`servicesPrice`** - Стоимость услуг фулфилмента (расчетное поле) +- **`logisticsPrice`** - Стоимость логистических услуг (расчетное поле) +- **`sellerConsumablesPrice`** - Стоимость расходников селлера (расчетное поле) +- **`ffConsumablesPrice`** - Стоимость расходников фулфилмента (расчетное поле) + +### **3. ТОВАРНЫЕ ПАРАМЕТРЫ:** +- **`items[]`** - Массив товаров с количествами и ценами +- **`productId`** - ID товара в позиции +- **`quantity`** - Количество каждого товара +- **`price`** - Цена за единицу товара +- **`totalPrice`** - Общая стоимость позиции +- **`services[]`** - Массив услуг для товара +- **`fulfillmentConsumables[]`** - Расходники фулфилмента для товара +- **`sellerConsumables[]`** - Расходники селлера для товара +- **`marketplaceCardId`** - ID карточки маркетплейса + +### **4. ЛОГИСТИЧЕСКИЕ ПАРАМЕТРЫ:** +- **`packagesCount`** - Количество грузовых мест +- **`volume`** - Объём груза в м³ +- **`routes[]`** - Маршруты доставки +- **`fromLocation`** - Точка забора груза +- **`toLocation`** - Точка доставки +- **`fromAddress`** - Полный адрес забора +- **`toAddress`** - Полный адрес доставки +- **`distance`** - Расстояние маршрута в км +- **`estimatedTime`** - Время доставки в часах +- **`logisticsPartnerId`** - ID логистического партнера + +### **5. УПРАВЛЕНЧЕСКИЕ ПАРАМЕТРЫ:** +- **`responsibleEmployee`** - Ответственный сотрудник +- **`notes`** - Комментарии и дополнительная информация +- **`createdAt`** - Дата создания поставки +- **`updatedAt`** - Дата последнего обновления +- **`fulfillmentCenterId`** - ID фулфилмент центра +- **`consumableType`** - Тип расходников + + + +## 🔄 **ЖИЗНЕННЫЙ ЦИКЛ ПАРАМЕТРОВ ПОСТАВКИ** + +### **Этап 1: Создание поставки (SELLER)** +```typescript +// Селлер указывает базовые параметры поставки +{ + deliveryDate: "2025-08-25", + totalItems: 100, + items: [...products], + partnerId: "supplier-123", + organizationId: "seller-456" +} +``` + +### **Этап 2: Одобрение поставщиком (WHOLESALE)** +```typescript +// Поставщик может дополнить параметры поставки +{ + status: "SUPPLIER_APPROVED", + packagesCount: 3, // Новый параметр + volume: 1.2, // Новый параметр + readyDate: "2025-08-24", // Новый параметр + notes: "Хрупкий груз" // Новый параметр +} +``` + +### **Этап 3: Логистическое планирование (LOGIST)** +```typescript +// Логистика использует параметры для расчетов +{ + logisticsPrice: calculateByVolume(volume, distance), + routes: [ + { + from: "Садовод", + to: "ФФ Центр", + packagesCount: 3, + volume: 1.2 + } + ] +} +``` + +## 🛡️ **ПРАВИЛА БЕЗОПАСНОСТИ ПАРАМЕТРОВ** + +### **Видимость по ролям:** + +| Параметр поставки | SELLER | WHOLESALE | FULFILLMENT | LOGIST | +|------------------|--------|-----------|-------------|---------| +| deliveryDate | ✅ | ✅ | ✅ | ✅ | +| totalAmount | ✅ | ❌ | ❌ | ❌ | +| productPrice | ✅ | ✅ | ❌ | ❌ | +| packagesCount | ✅ | ✅ | ✅ | ✅ | +| volume | ✅ | ✅ | ✅ | ✅ | +| recipe | ✅ | ❌ | ✅ | ❌ | +| logisticsPrice | ✅ | ❌ | ✅ | ✅ | + +### **Права на изменение:** + +- **SELLER**: Может изменять до одобрения поставщиком +- **WHOLESALE**: Может добавлять логистические параметры при одобрении +- **FULFILLMENT**: Не может изменять, только просматривать +- **LOGIST**: Может добавлять маршруты и логистические расчеты + +## 🎛️ **UI КОМПОНЕНТЫ ДЛЯ ПАРАМЕТРОВ ПОСТАВКИ** + +### **Форма ввода параметров поставщиком:** + +```jsx +
+

Параметры поставки

+ + {/* Основные параметры */} + + + + {/* Логистические параметры (опционально) */} + + + + {/* Дополнительные параметры */} + +