Files
octopus/myproject/УЛУЧШИТЬ ПОСТУПЛЕНИЕ.md
Andrey Smakotin 0da2995a74 docs: добавлен план критичных улучшений системы поступления
Документ содержит приоритизированный план улучшений:

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

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

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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 17:38:51 +03:00

154 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Критичные улучшения системы поступления
## 🔴 Высокий приоритет
### 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