Files
octopus/myproject/УЛУЧШИТЬ ПОСТУПЛЕНИЕ.md
Andrey Smakotin c534e27c41 refactor: подготовка к стандартизации Transfer моделей
Текущее состояние перед рефакторингом Transfer → TransferDocument.
Все изменения с последнего коммита по улучшению системы поступлений.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 19:55:50 +03:00

5.9 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
  • Упрощен код сигналов (удалены create_stock_batch_on_incoming и update_stock_batch_on_incoming_edit)
  • Упрощен IncomingDocumentService.confirm_document() - напрямую создает StockBatch
  • Меньше JOIN'ов в запросах
  • Применены миграции БД для удаления таблиц

Дата выполнения: 2025-12-26


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. 26.12.2025: Рефакторинг моделей (п.4) - избавились от лишних сущностей
  5. 📅 По необходимости: Bulk операции (п.5), документация (п.6)

Метрики успеха

  • Все критические операции покрыты тестами (>80% coverage)
  • Список документов загружается <500ms (при 1000+ документах)
  • Нет уязвимостей прав доступа
  • Документация актуальна

Дата создания: 2025-12-26 Рейтинг текущей архитектуры: 8.5/10