Перейти к содержанию

Используемые продукты и протоколы

На этой странице перечислены все внешние продукты, библиотеки и протоколы, используемые в проекте, с кратким объяснением назначения каждого.

Серверная часть

Продукт Версия Назначение
Python 3.12 Основной язык серверной части
FastAPI Каркас для построения REST-адресов серверной части. Обеспечивает автоматическую проверку входных данных и формирование документации по адресам
Uvicorn Веб-сервер для запуска приложения FastAPI. Обрабатывает входящие HTTP-запросы
Pydantic Описание и проверка структур данных (схем запросов и ответов)
Motor Асинхронный драйвер для работы с MongoDB из Python. Позволяет не блокировать обработку запросов при обращении к базе данных
Celery Система распределённых задач. Используется для выполнения длительных операций (поиск по реестру) в фоновом режиме
pdf2image Преобразование страниц PDF в изображения для последующего распознавания
pytesseract Оптическое распознавание символов (OCR). Извлекает текст из изображений страниц
openpyxl Чтение и запись файлов Excel. Используется для импорта реестров и выгрузки результатов

Пользовательский интерфейс

Продукт Версия Назначение
React 19 Библиотека для построения пользовательского интерфейса
TypeScript Язык программирования с проверкой типов. Помогает обнаруживать ошибки до запуска программы
Vite Инструмент сборки пользовательского интерфейса. Обеспечивает быструю сборку и горячую перезагрузку при разработке
React Query (TanStack Query) Управление серверным состоянием: отправка запросов, кэширование ответов, автоматическое обновление данных
Zustand Хранилище локального состояния интерфейса (фильтры, выбранные элементы, состояние модальных окон)
Tailwind CSS Набор готовых стилей для оформления интерфейса
Radix UI (shadcn/ui) Набор доступных компонентов интерфейса: кнопки, таблицы, выпадающие списки, модальные окна
Axios Библиотека для отправки HTTP-запросов к серверной части

Хранение данных

Продукт Версия Назначение
MongoDB 7 Документная база данных. Хранит сведения о документах, реестрах, группах, настройках и заданиях. Выбрана из-за гибкой схемы --- разные типы документов могут иметь разный набор полей
MinIO S3-совместимое хранилище файлов. Хранит исходные PDF, изображения страниц и превью документов. Позволяет работать с файлами по тем же правилам, что и облачное хранилище Amazon S3, но на собственном сервере
Redis 7 Хранилище в оперативной памяти. Используется как брокер сообщений для передачи задач между серверной частью и фоновым обработчиком Celery

Внешние сервисы

Продукт Назначение
Claude (Anthropic) Языковая модель для интеллектуальной обработки документов: разделение многостраничных файлов на отдельные документы, определение типа, извлечение ключевых полей. Поддерживает два режима --- немедленный и пакетный (со скидкой 50 %)
Google Cloud Vision Дополнительный сервис оптического распознавания символов. Включается по необходимости через настройку GCP_VISION_ENABLED. Используется как альтернатива встроенному распознавателю pytesseract для повышения качества извлечения текста

Инфраструктура

Продукт Назначение
Docker Контейнеризация всех компонентов. Каждый сервис работает в изолированном контейнере со своими зависимостями
Docker Compose Описание и управление набором контейнеров. Один файл docker-compose.yml определяет все сервисы, их связи, ограничения ресурсов и порядок запуска
nginx Веб-сервер и обратный прокси. Принимает входящие HTTPS-запросы, раздаёт статические файлы интерфейса, проксирует обращения к серверной части
Let's Encrypt / certbot Автоматический выпуск и обновление SSL-сертификатов для HTTPS
MkDocs Material Генератор сайта документации из файлов в формате Markdown. Используется для создания этого сайта

Протоколы и форматы

Протокол / формат Где используется
HTTP / HTTPS Взаимодействие между браузером и сервером, между nginx и серверной частью
REST Архитектурный стиль серверных адресов. Все обращения к серверной части выполняются через REST-адреса с передачей данных в формате JSON
JSON Формат обмена данными между пользовательским интерфейсом и серверной частью
S3 (Amazon S3) Протокол взаимодействия с хранилищем файлов MinIO
WebSocket Не используется. Обновление данных на экране выполняется через периодические запросы (polling)