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

@@ -1,6 +1,8 @@
# State-Corp / Отчётность Организаций
# Django ETL Boilerplate
Backend для системы Отчётность Организаций (State-Corp).
Шаблон Django приложения для ETL (Extract, Transform, Load) операций с функциями веб-скрапинга.
Название проекта: State Corp Backend
## Технологический стек
@@ -10,10 +12,53 @@ Backend для системы Отчётность Организаций (State
- **PostgreSQL**: 15.10
- **Redis**: 7.x
- **Celery**: 5.3.6
- **Scrapy**: 2.11.2
- **Playwright**: 1.52+ (browser automation)
- **Gunicorn**: 21.2.0
- **Apache**: 2.4.57
## Парсеры данных
Проект включает парсеры для загрузки данных из государственных источников:
### Минпромторг (minpromtorg.gov.ru)
- **Сертификаты промышленного производства** - `parse_industrial_production`
- **Реестр производителей** - `parse_manufactures`
### Единый реестр проверок (proverki.gov.ru)
- **Проверки по ФЗ-294** - традиционные проверки
- **Проверки по ФЗ-248** - новые проверки с 2021 года
- **Автоматическая синхронизация** - `sync_inspections`
### Запуск парсеров
```python
# Через Celery
from apps.parsers.tasks import (
parse_industrial_production,
parse_manufactures,
parse_inspections,
sync_inspections,
)
# Парсинг сертификатов
parse_industrial_production.delay()
# Парсинг производителей
parse_manufactures.delay()
# Парсинг проверок за конкретный месяц
parse_inspections.delay(year=2025, month=10, is_federal_law_248=False)
# Автоматическая синхронизация (с 01.01.2025 до текущего месяца)
sync_inspections.delay()
```
### Особенности парсера proverki.gov.ru
- Использует **Playwright** для JS-рендеринга
- Поддержка **потокового парсинга** для больших файлов (>50 МБ)
- Автоматическое определение последнего загруженного периода
- Раздельная загрузка ФЗ-294 и ФЗ-248
## Структура проекта
```
@@ -313,4 +358,38 @@ make clean # Очистка временных файлов
## Лицензия
MIT License
MIT License
---
## Changelog
### 2026-01-21
#### Добавлено
- **Задача `sync_inspections`** - автоматическая синхронизация проверок с proverki.gov.ru
- Инкрементальная загрузка с последнего сохранённого периода
- Начало с 01.01.2025 если БД пуста
- Раздельная загрузка ФЗ-294 и ФЗ-248
- Автоматическая остановка при отсутствии данных (2 пустых месяца)
- **Поля в модели InspectionRecord**:
- `is_federal_law_248` - признак проверки по ФЗ-248
- `data_year` - год загруженных данных
- `data_month` - месяц загруженных данных
- **Потоковый парсинг XML** для файлов >50 МБ (iterparse)
- **Методы в InspectionService**:
- `get_last_loaded_period()` - получение последнего загруженного периода
- `has_data_for_period()` - проверка наличия данных за период
### 2026-01-20
#### Добавлено
- **Парсер proverki.gov.ru** с поддержкой Playwright
- Навигация по порталу (клик на вкладку "Скачать")
- Парсинг XML с namespaces
- Извлечение данных из атрибутов и вложенных элементов
### 2026-01-19
#### Добавлено
- **Парсеры Минпромторга** (сертификаты, производители)
- **Модуль apps.parsers** с клиентами, сервисами и задачами Celery
- **Django Admin** для управления записями парсеров
- Дедупликация по unique constraints