Документ содержит приоритизированный план улучшений: Высокий приоритет: - Добавить проверку прав доступа в views - Покрыть тестами критические пути - Оптимизировать N+1 запросы в списках Средний приоритет: - Рефакторинг избыточности моделей - Bulk операции для массового импорта - Улучшение документации Низкий приоритет: - Асинхронная обработка больших документов - Аудит и история изменений 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
5.6 KiB
Критичные улучшения системы поступления
🔴 Высокий приоритет
1. Безопасность и права доступа
Проблема: Нет проверки прав доступа в views Риск: Любой авторизованный пользователь может подтверждать/отменять документы
# Добавить в views:
- PermissionRequiredMixin для confirm/cancel
- Проверка прав на склад (может ли пользователь работать с этим складом)
- Проверка прав на изменение подтвержденных документов
Файлы: inventory/views/incoming_document.py
2. Тестирование критических путей
Проблема: Нет автотестов для основных операций Риск: Регрессии при изменениях
Минимальный набор тестов:
# 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
Проблема: Избыточные запросы к БД при отображении списков Риск: Медленная работа при большом количестве документов
# 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 Решение:
# 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)
- ✅ Неделя 2: Тесты (критические пути, п.2)
- ✅ Неделя 3: Производительность (N+1, п.3)
- 📅 Квартал 2: Рефакторинг моделей (п.4)
- 📅 По необходимости: Bulk операции (п.5), документация (п.6)
Метрики успеха
- ✅ Все критические операции покрыты тестами (>80% coverage)
- ✅ Список документов загружается <500ms (при 1000+ документах)
- ✅ Нет уязвимостей прав доступа
- ✅ Документация актуальна
Дата создания: 2025-12-26 Рейтинг текущей архитектуры: 8.5/10