diff --git a/myproject/УЛУЧШИТЬ ПОСТУПЛЕНИЕ.md b/myproject/УЛУЧШИТЬ ПОСТУПЛЕНИЕ.md new file mode 100644 index 0000000..91f966c --- /dev/null +++ b/myproject/УЛУЧШИТЬ ПОСТУПЛЕНИЕ.md @@ -0,0 +1,153 @@ +# Критичные улучшения системы поступления + +## 🔴 Высокий приоритет + +### 1. Безопасность и права доступа +**Проблема:** Нет проверки прав доступа в views +**Риск:** Любой авторизованный пользователь может подтверждать/отменять документы + +```python +# Добавить в views: +- PermissionRequiredMixin для confirm/cancel +- Проверка прав на склад (может ли пользователь работать с этим складом) +- Проверка прав на изменение подтвержденных документов +``` + +**Файлы:** `inventory/views/incoming_document.py` + +--- + +### 2. Тестирование критических путей +**Проблема:** Нет автотестов для основных операций +**Риск:** Регрессии при изменениях + +**Минимальный набор тестов:** +```python +# tests/test_incoming_document_service.py +- test_create_document() +- test_add_item() +- test_confirm_document_creates_stock() +- test_cancel_document_reverses_stock() +- test_cannot_confirm_empty_document() +- test_cannot_edit_confirmed_document() +``` + +--- + +### 3. N+1 запросы в list views +**Проблема:** Избыточные запросы к БД при отображении списков +**Риск:** Медленная работа при большом количестве документов + +```python +# inventory/views/incoming_document.py:27 +def get_queryset(self): + return IncomingDocument.objects.select_related( + 'warehouse', 'created_by', 'confirmed_by' + ).prefetch_related( + 'items__product' # ← Добавить + ).annotate( + items_count=Count('items'), # ← Добавить + total_quantity=Sum('items__quantity'), # ← Добавить + total_cost=Sum(F('items__quantity') * F('items__cost_price')) # ← Добавить + ).order_by('-date', '-created_at') +``` + +--- + +## 🟡 Средний приоритет + +### 4. Рефакторинг модельной избыточности +**Проблема:** IncomingDocument → IncomingBatch → Incoming создает 3 уровня данных +**Решение:** Долгосрочная миграция к упрощенной структуре + +**Архитектура будущего:** +``` +IncomingDocument (документ) + ↓ +IncomingDocumentItem (позиции документа) + ↓ +StockBatch (напрямую создается из items при подтверждении) +``` + +**Преимущества:** +- Убрать промежуточные Incoming/IncomingBatch +- Упростить код сигналов +- Меньше JOIN'ов в запросах + +**Миграция:** Постепенная, требует переписывания signals и services + +--- + +### 5. Bulk операции для массового добавления товаров +**Проблема:** Добавление товаров по одному при импорте из Excel +**Решение:** +```python +# inventory/services/incoming_document_service.py +@staticmethod +def add_items_bulk(document, items_data): + """ + items_data = [ + {'product': product1, 'quantity': 10, 'cost_price': 100}, + {'product': product2, 'quantity': 20, 'cost_price': 200}, + ] + """ + IncomingDocumentItem.objects.bulk_create([ + IncomingDocumentItem( + document=document, + product=item['product'], + quantity=item['quantity'], + cost_price=item['cost_price'] + ) + for item in items_data + ]) +``` + +--- + +### 6. Документация и комментарии +**Добавить:** +- Docstrings с примерами для всех методов service +- Диаграмма потока данных в README: `IncomingDocument → IncomingBatch → Incoming → StockBatch → Stock` +- Примеры использования API в комментариях + +--- + +## 🟢 Низкий приоритет (будущее) + +### 7. Асинхронное подтверждение больших документов +**Для документов с 1000+ позициями:** +- Celery task для confirm_document() +- WebSocket уведомления о прогрессе +- Фоновая обработка + +--- + +### 8. Аудит и логирование +**Отслеживание изменений:** +- django-simple-history для IncomingDocument +- Логирование всех операций с товарами +- История изменений cost_price + +--- + +## Порядок внедрения + +1. ✅ **Неделя 1:** Безопасность (права доступ, п.1) +2. ✅ **Неделя 2:** Тесты (критические пути, п.2) +3. ✅ **Неделя 3:** Производительность (N+1, п.3) +4. 📅 **Квартал 2:** Рефакторинг моделей (п.4) +5. 📅 **По необходимости:** Bulk операции (п.5), документация (п.6) + +--- + +## Метрики успеха + +- ✅ Все критические операции покрыты тестами (>80% coverage) +- ✅ Список документов загружается <500ms (при 1000+ документах) +- ✅ Нет уязвимостей прав доступа +- ✅ Документация актуальна + +--- + +**Дата создания:** 2025-12-26 +**Рейтинг текущей архитектуры:** 8.5/10