Backend

Backend построен на:

  • FastAPI 0.115.6
  • SQLAlchemy asyncio 2.0
  • Alembic 1.14
  • PostgreSQL через asyncpg
  • openpyxl для чтения и экспорта Excel

Основная входная точка: src/backend/app/main.py.

Подключенные роутеры:

  • auth
  • reports
  • products
  • sellers
  • upload_history

Frontend

Frontend построен на:

  • Next.js 15.1.6
  • React 19
  • MUI 7
  • MUI Data Grid

Основной UX построен вокруг страниц:

  • /dashboard
  • /reports
  • /reports/[id]
  • /products
  • /sellers
  • /history
  • /limit-history
  • /auth/auth1/login

Хранилища

Система использует два типа хранения:

  • PostgreSQL для сущностей и вычисленных результатов
  • файловую директорию storage/reports для исходных загруженных файлов

Это разделение важно, потому что операция rebuild заново строит отчет по исходному файлу, а не по уже сохраненным агрегатам.

Поток обработки отчета

  1. Frontend отправляет файл в POST /api/reports/upload.
  2. Backend проверяет расширение и читает содержимое.
  3. Парсер считает строки детализации и проверяет лимиты пользователя.
  4. Система списывает лимиты и пишет запись в limit_history.
  5. Парсер агрегирует строки по артикулу поставщика.
  6. Backend обогащает строки себестоимостью из каталога товаров пользователя.
  7. Отчет и строки отчета сохраняются в БД.
  8. Исходный файл сохраняется в storage/reports.

Важные ограничения текущей реализации

  • прогресс объединения отчетов хранится в памяти процесса backend
  • ручные корректировки сохраняются в JSON-поле manual_values
  • права доступа построены только на JWT и user_id
  • формулы summary-экспорта реализованы частично: ряд колонок остается пустым