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
This commit is contained in:
2026-02-17 09:24:42 +01:00
parent e9d7f24aaa
commit fd2adf9ab4
31 changed files with 1419 additions and 933 deletions

View File

@@ -6,6 +6,120 @@
---
## [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
### Добавлено