- 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
10 KiB
10 KiB
Changelog
Все значимые изменения в проекте документируются в этом файле.
Формат основан на Keep a Changelog.
[0.4.1] - 2026-02-02
Исправлено
CI/CD Pipeline
- Удалена зависимость от GitHub Actions (сеть блокирует доступ к GitHub)
actions/checkout@v4→git cloneс переменными Giteaactions/setup-python@v4→ установка черезapt-getdocker/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 trackingsync_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_atUUIDPrimaryKeyMixin— UUID вместо auto-increment IDSoftDeleteMixin— мягкое удаление сis_deleted,deleted_atAuditMixin— отслеживаниеcreated_by,updated_byOrderableMixin— полеorderдля сортировкиStatusMixin— статусы draft/active/inactive/archivedSlugMixin— 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— кастомные исключения APIpermissions.py— базовые permissions (IsOwner, IsAdminOrReadOnly и др.)pagination.py— CursorPaginationfilters.py— BaseFilterSetcache.py— декораторы кэшированияtasks.py— BaseTask для Celerylogging.py— структурированное логированиеmiddleware.py— RequestIDMiddlewaresignals.py— SignalDispatcherresponse.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.mdcustom_test_runner.py
[0.1.0] - 2026-01-20
Добавлено
- Начальная структура проекта
- Приложение
userс JWT аутентификацией - Базовые модели User и Profile
- Docker конфигурация
- Pre-commit hooks