docs: добавлен план критичных улучшений системы поступления

Документ содержит приоритизированный план улучшений:

Высокий приоритет:
- Добавить проверку прав доступа в views
- Покрыть тестами критические пути
- Оптимизировать N+1 запросы в списках

Средний приоритет:
- Рефакторинг избыточности моделей
- Bulk операции для массового импорта
- Улучшение документации

Низкий приоритет:
- Асинхронная обработка больших документов
- Аудит и история изменений

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-26 17:38:51 +03:00
parent c9ff778630
commit 0da2995a74

View File

@@ -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