feat(parsers): add proverki.gov.ru parser with sync_inspections task
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 1m28s
CI/CD Pipeline / Build Docker Images (push) Has been cancelled
CI/CD Pipeline / Push to Gitea Registry (push) Has been cancelled
CI/CD Pipeline / Run Tests (push) Has been cancelled

- Add InspectionRecord model with is_federal_law_248, data_year, data_month fields
- Add ProverkiClient with Playwright support for JS-rendered portal
- Add streaming XML parser for large files (>50MB)
- Add sync_inspections task with incremental loading logic
  - Starts from 01.01.2025 if DB is empty
  - Loads both FZ-294 and FZ-248 inspections
  - Stops after 2 consecutive empty months
- Add InspectionService methods: get_last_loaded_period, has_data_for_period
- Add Minpromtorg parsers (certificates, manufacturers)
- Add Django Admin for parser models
- Update README with parsers documentation and changelog
This commit is contained in:
2026-01-21 20:16:25 +01:00
parent f121445313
commit 199d871923
45 changed files with 6810 additions and 97 deletions

View File

@@ -0,0 +1,90 @@
"""
Dataclass схемы для данных proverki.gov.ru.
Эти классы представляют данные о проверках, возвращаемые клиентом.
Они не зависят от Django ORM и используются как DTO.
"""
from dataclasses import dataclass
@dataclass(frozen=True)
class Inspection:
"""
Проверка из Единого реестра проверок.
Источник: ФГИС "Единый реестр проверок" (proverki.gov.ru).
Содержит данные о проведённых или запланированных проверках
юридических лиц и индивидуальных предпринимателей.
Поддерживает два типа проверок:
- ФЗ-294 (традиционные проверки)
- ФЗ-248 (новые проверки с 2021 года)
"""
registration_number: str
"""Учётный номер проверки в реестре."""
inn: str
"""ИНН проверяемого лица."""
ogrn: str
"""ОГРН проверяемого лица."""
organisation_name: str
"""Наименование проверяемого лица."""
control_authority: str
"""Наименование контрольного (надзорного) органа."""
inspection_type: str
"""Тип проверки (плановая/внеплановая)."""
inspection_form: str
"""Форма проверки (документарная/выездная)."""
start_date: str
"""Дата начала проверки (строка формата YYYY-MM-DD или DD.MM.YYYY)."""
end_date: str
"""Дата окончания проверки."""
status: str
"""Статус проверки."""
legal_basis: str
"""Правовое основание проверки (ФЗ-294, ФЗ-248 и т.д.)."""
result: str = ""
"""Результат проверки (если завершена)."""
is_federal_law_248: bool = False
"""Признак проверки по ФЗ-248 (новые проверки с 2021 года)."""
@dataclass(frozen=True)
class InspectionPlan:
"""
План проверок на определённый период.
Содержит метаданные о плане проверок (год, период, количество записей).
"""
year: int
"""Год плана проверок."""
month: int | None
"""Месяц (если план помесячный, иначе None)."""
file_url: str
"""URL файла с данными плана."""
file_name: str
"""Имя файла."""
records_count: int = 0
"""Количество записей в плане (если известно)."""
file_format: str = "xml"
"""Формат файла (xml, csv, xlsx)."""