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

206 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog
Все значимые изменения в проекте документируются в этом файле.
Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/).
---
## [0.4.1] - 2026-02-02
### Исправлено
#### CI/CD Pipeline
- Удалена зависимость от GitHub Actions (сеть блокирует доступ к GitHub)
- `actions/checkout@v4``git 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