Files
state-corp-backend/CHANGELOG.md
Aleksandr Meshchriakov fd2adf9ab4 Refactor project structure and update configurations for State Corp backend
- Updated project description in __init__.py
- Enhanced .gitignore to exclude additional data files
- Modified User model to remove first_name and last_name fields
- Improved instance save method in services.py to include updated_at field
- Added API tokens to .env.example for external services
- Cleaned up test files for better readability
- Updated Dockerfile and docker-compose.yml for improved setup
- Revised README.md to reflect project changes and added changelog
2026-02-17 09:24:42 +01:00

10 KiB
Raw Blame History

Changelog

Все значимые изменения в проекте документируются в этом файле.

Формат основан на Keep a Changelog.


[0.4.1] - 2026-02-02

Исправлено

CI/CD Pipeline

  • Удалена зависимость от GitHub Actions (сеть блокирует доступ к GitHub)
  • actions/checkout@v4git clone с переменными Gitea
  • actions/setup-python@v4 → установка через apt-get
  • docker/build-push-action@v5 → чистые docker build/push команды
  • Тесты используют config.settings.test (SQLite in-memory) вместо PostgreSQL service

Code Quality

  • Исправлены ошибки ruff lint:
    • Сортировка импортов (I001)
    • Удалены неиспользуемые импорты и переменные (F401, F841)
    • Добавлены noqa для тестового кода (S106, S314)

[0.4.0] - 2026-01-28

Добавлено

Парсер ФНС бухгалтерской отчетности (apps.parsers.clients.fns)

  • FNSExcelParser — парсер Excel файлов бухгалтерской отчетности:

    • Формат файла: fin_{external_id}_{ogrn}.xlsx
    • Поддержка форм: №1 (Баланс), №2 (Прибыль/Убыток), №3 (Капитал), №4 (Денежные потоки), №6 (Целевое использование)
    • Автоматическое определение года и формы по структуре листа
    • Извлечение значений period_start/period_end для каждой строки
  • Модели (models.py):

    • FinancialReport — отчет с метаданными (external_id, ogrn, file_hash, status, source)
    • FinancialReportLine — строки отчета (form_code, line_code, year, period_start, period_end)
    • SHA256 хэш файла для дедупликации
    • Индексы: ogrn, year, form_code+line_code
  • Сервисный слой (services.py):

    • FNSReportService — сохранение отчетов, проверка дубликатов по хешу
    • Поиск по ОГРН
    • Bulk-сохранение строк отчета
  • Celery задачи (tasks.py):

    • scan_fns_directory — периодическое сканирование папки каждые 5 минут
    • process_fns_file — обработка одного файла
    • process_fns_files_batch — пакетная обработка через API
    • Перемещение файлов в processed/ или failed/
  • API endpoints (views.py, urls.py):

    • POST /api/v1/fns/upload/ — пакетная загрузка файлов
    • GET /api/v1/fns/reports/ — список отчетов с фильтрацией
    • GET /api/v1/fns/reports/{id}/ — детали отчета со строками
    • Swagger теги для группировки в документации
  • Админка (admin.py):

    • FinancialReportAdmin с inline для строк
    • Цветовая индикация статусов
    • Фильтры: status, source, ogrn

Тестирование

  • 25 unit-тестов для парсера, схем и сервиса
  • Покрытие: валидация имени файла, парсинг значений, сохранение отчетов

Конфигурация

  • FNS_WATCH_DIRECTORY — папка для мониторинга (/src/input/fns)
  • FNS_PROCESSED_DIRECTORY — папка обработанных файлов
  • FNS_FAILED_DIRECTORY — папка с ошибками
  • Celery Beat: scan-fns-directory каждые 5 минут

[0.3.0] - 2026-01-27

Добавлено

Парсер zakupki.gov.ru (apps.parsers.clients.zakupki)

  • ZakupkiClient — клиент для получения данных о закупках:

    • Интеграция через SOAP API (FTP закрыт с 01.01.2025)
    • Методы: getDocsByOrgRegionRequest, getDocsByReestrNumberRequest
    • Парсинг XML/ZIP архивов с поддержкой множественных кодировок (UTF-8, Windows-1251)
    • Поддержка прокси-серверов
    • Маппинг 80+ регионов РФ
  • Модель ProcurementRecord (models.py):

    • 18 полей: номер закупки, ИНН/КПП/ОГРН заказчика, НМЦ, тип закона (44-ФЗ/223-ФЗ), статус
    • Поля региона, года, месяца для фильтрации
    • load_batch для отслеживания пакетной загрузки
    • 3 индекса для оптимизации запросов
  • Сервисный слой (services.py):

    • ProcurementService — сохранение, поиск, отслеживание загрузок
    • ParserLoadLogService — логирование результатов парсинга
    • Bulk-операции с chunking и обработкой дубликатов
  • Celery задачи (tasks.py):

    • parse_procurements — загрузка по региону/году/месяцу с BackgroundJob tracking
    • sync_procurements — синхронизация помесячно с автопродолжением
  • Админка (admin.py):

    • Цветовая индикация статусов
    • Поиск по номеру закупки, ИНН, ОГРН, названию заказчика
    • Фильтры: тип закона, статус, регион, batch, дата создания
    • Read-only режим

Тестирование

  • 71 тест (66 unit + 5 E2E)
  • ProcurementRecordFactory с Faker("ru_RU")
  • E2E тесты с реальными HTTP-запросами (активация: RUN_E2E_TESTS=1)
  • Покрытие: клиент, сервисы, задачи

Требования для работы

  • Токен SOAP API (получается через Госуслуги на https://zakupki.gov.ru/pmd/auth/welcome)

[0.2.0] - 2026-01-21

Добавлено

Core Module (apps.core)

  • Model Mixins (mixins.py):

    • TimestampMixin — автоматические created_at, updated_at
    • UUIDPrimaryKeyMixin — UUID вместо auto-increment ID
    • SoftDeleteMixin — мягкое удаление с is_deleted, deleted_at
    • AuditMixin — отслеживание created_by, updated_by
    • OrderableMixin — поле order для сортировки
    • StatusMixin — статусы draft/active/inactive/archived
    • SlugMixin — URL-friendly идентификаторы
  • Base Services (services.py):

    • BaseService — базовый CRUD сервис
    • BaseReadOnlyService — только чтение
    • TransactionMixin — управление транзакциями
    • BulkOperationsMixin — массовые операции (bulk_create_chunked, bulk_update_or_create, bulk_delete, bulk_update_fields)
    • QueryOptimizerMixin — декларативная оптимизация запросов (select_related, prefetch_related, only, defer)
    • BackgroundJobService — управление фоновыми задачами
  • Base ViewSets (viewsets.py):

    • BaseViewSet — базовый CRUD ViewSet с пагинацией, фильтрацией, логированием
    • ReadOnlyViewSet — только чтение
    • OwnerViewSet — фильтрация по владельцу
    • BulkMixin — массовые операции через API (bulk_create, bulk_update, bulk_delete)
  • Background Job Tracking (models.py):

    • Модель BackgroundJob для отслеживания Celery задач
    • API endpoints: GET /api/v1/jobs/, GET /api/v1/jobs/{task_id}/
    • Статусы: pending, started, success, failure, revoked, retry
    • Прогресс выполнения и результаты
  • Management Commands (management/commands/base.py):

    • BaseAppCommand — базовый класс для команд
    • Поддержка --dry-run, --silent
    • Прогресс-бар, измерение времени, логирование
  • Прочее:

    • exceptions.py — кастомные исключения API
    • permissions.py — базовые permissions (IsOwner, IsAdminOrReadOnly и др.)
    • pagination.py — CursorPagination
    • filters.py — BaseFilterSet
    • cache.py — декораторы кэширования
    • tasks.py — BaseTask для Celery
    • logging.py — структурированное логирование
    • middleware.py — RequestIDMiddleware
    • signals.py — SignalDispatcher
    • response.py — унифицированные API ответы
    • openapi.py — декоратор для документации

Тестирование

  • Переход на factory_boy + faker (вместо model_bakery + uuid)
  • Фабрики: UserFactory, ProfileFactory
  • 297 тестов

Конфигурация

  • API versioning: /api/v1/
  • Отдельный test.py для настроек тестов
  • Обновлён pyproject.toml
  • Правила разработки в .qoder/rules/main.md

Изменено

  • Структура тестов перенесена в /tests/apps/
  • Удалён conftest.py (pytest не используется)
  • Обновлены URLs с namespace

Удалено

  • ruff.toml (конфигурация перенесена в pyproject.toml)
  • CI_CD_SUMMARY.md
  • custom_test_runner.py

[0.1.0] - 2026-01-20

Добавлено

  • Начальная структура проекта
  • Приложение user с JWT аутентификацией
  • Базовые модели User и Profile
  • Docker конфигурация
  • Pre-commit hooks