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

5.6 KiB
Raw Blame History

Критичные улучшения системы поступления

🔴 Высокий приоритет

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: Безопасность (права доступ, п.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