Files
mostovik-backend/docs/parser-external-access-note-ru.md

65 lines
12 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.
# Аналитическая записка по внешним обращениям парсеров
Дата подготовки: 2026-05-18
## Краткое описание
В backend Mostovik подсистема парсеров реализована как набор Celery-задач и HTTP-клиентов. Парсеры обращаются к открытым государственным источникам, публичным API и, при наличии ключей в переменных окружения, к платным/служебным API. Полученные данные нормализуются и сохраняются в PostgreSQL через сервисный слой.
Основные точки входа находятся в `src/apps/parsers/tasks.py`. Внешние HTTP-запросы выполняются через клиенты в `src/apps/parsers/clients/`. Общий HTTP-клиент использует GET/POST, таймауты, стандартный User-Agent и, если включено `PARSER_USE_RUNTIME_PROXIES`, может использовать активные RU-прокси из БД.
## Куда обращается и что скачивает
| Источник | Адреса обращения | Что скачивается / получается |
|---|---|---|
| Минпромторг: сертификаты промышленного производства | `https://minpromtorg.gov.ru/api/kss-document-preview` | JSON-список документов, затем последний Excel-файл из поля `files[].url`. Из Excel берутся номер заключения, даты, ссылка на документ, наименование организации, ИНН, ОГРН. |
| Минпромторг: реестр производителей | `https://minpromtorg.gov.ru/api/kss-document-preview` | JSON-список документов, затем последний Excel-файл `data_orgs_YYYYMMDD...`. Из Excel берутся наименование производителя, ИНН, ОГРН, адрес. |
| Минпромторг: промышленная продукция | `https://minpromtorg.gov.ru/api/kss-document-preview` | JSON-список документов, затем Excel-файл реестра промышленной продукции. Из Excel берутся организация, ИНН, ОГРН, регистрационный номер, наименование продукции, модель, ОКПД2, ТН ВЭД, нормативный документ. |
| ГИСП: промышленная продукция | `https://gisp.gov.ru/pp719v2/pub/prod/`, технический API `https://gisp.gov.ru/pp719v2/pub/prod/b/` | В каталоге источников этот адрес указан как upstream для продукции. Универсальный файловый клиент умеет получить первую страницу JSON через POST на `/pp719v2/pub/prod/b/`; основная Celery-задача `parse_industrial_products` сейчас использует Excel discovery Минпромторга. |
| Генпрокуратура: единый реестр проверок | `https://proverki.gov.ru/portal/public-open-data/check/{year}/{month}?isFederalLaw248=true|false`, `https://proverki.gov.ru/portal/public-open-data/check/{year}/plans?isFederalLaw248=true|false` | ZIP/XML выгрузки с проверками или планами проверок. При необходимости используется Playwright: открывается страница портала, выбирается вкладка скачивания, загружается ZIP/XML. |
| ЕИС закупки: SOAP-интеграция | `https://int44.zakupki.gov.ru/eis-integration/services/getDocsIP` | SOAP-запрос возвращает `archiveUrl`; затем скачивается ZIP/XML-архив закупок/контрактов. Для доступа используется `ZAKUPKI_TOKEN` из окружения. |
| ЕИС закупки: HTTP fallback | `https://zakupki.gov.ru/opendata/download/notifications/{region}/{year}/...` | ZIP-архивы с XML-файлами закупок, если SOAP-токен не используется или передана прямая ссылка. |
| ЕИС/FAS generic-источники | `https://zakupki.gov.ru/epz/order/extendedsearch/results.html`, `https://zakupki.gov.ru/epz/orderclause/search/results.html`, `https://zakupki.gov.ru/epz/contract/search/results.html`, `https://zakupki.gov.ru/epz/dishonestsupplier/search/results.html`, `https://fas.gov.ru/pages/activity/reestr-uridicheskih-lic` | HTML-страницы официальных реестров. Парсер извлекает карточки/таблицы: закупки 44-ФЗ, закупки 223-ФЗ, контракты, недобросовестные поставщики, сведения ФАС по ГОЗ. |
| ФНС: бухгалтерская отчетность | Автоматического HTTP-скачивания с ФНС в текущем коде не найдено. В каталоге источников указан справочный URL `https://bo.nalog.gov.ru/advanced-search/organizations/search?...` | Обрабатываются локально загруженные или положенные в папку `input/fns` файлы `fin_{id}_{ogrn}.xlsx`, а также ZIP-архивы с такими файлами. Из Excel берутся строки форм N 1, 2, 3, 4, 6 бухгалтерской отчетности. |
| КАД Арбитр через Checko | Официальный источник в каталоге: `https://kad.arbitr.ru/`; фактический lookup в коде: `https://api.checko.ru/v2/legal-cases` | JSON-ответы по арбитражным делам для активных организаций из внутренних реестров. В запрос передаются ИНН/ОГРН. В payload сохраняются номер дела, суд, тип, статус, даты, суммы, стороны и ссылка на карточку. |
| Федресурс/ЕФРСБ | `https://bankrot.fedresurs.ru/`; fallback: `https://api.checko.ru/v2/company` | Официальный источник обрабатывается как HTML/структурированная выгрузка. При недоступности портала используется Checko: по ИНН/ОГРН организации берутся сведения о банкротных сообщениях из JSON. |
| ФСТЭК | `https://reestr.fstec.ru/reg3` и найденные на странице ссылки вида `module=rfiles` или `/uploads/reg...` | HTML-страница реестра, затем CSV/файловая выгрузка, если ссылка найдена. Для этого источника в коде отключена SSL-верификация. |
| Вакансии: Работа России | Клиент использует `http://opendata.trudvsem.ru/api/v1/vacancies`, `http://opendata.trudvsem.ru/api/v1/vacancies/company/inn/{inn}`; в каталоге источников указан `https://opendata.trudvsem.ru/api/v1/vacancies` | JSON-список вакансий, включая работодателя, ИНН/ОГРН при наличии, название вакансии, дату, зарплату, статус, ссылку. |
| Вакансии: HeadHunter | `https://api.hh.ru/vacancies` | JSON-список вакансий. Поиск выполняется по региону и/или тексту, для организаций без поиска по ИНН используется нормализованное название. |
| Вакансии: SuperJob | `https://api.superjob.ru/2.0/vacancies/` | JSON-список вакансий. Используется только если задан `SUPERJOB_APP_ID`; ключ передается в заголовке `X-Api-App-Id`. |
| Checko: контракты и проверки по организациям | `https://api.checko.ru/v2/contracts`, `https://api.checko.ru/v2/inspections` | JSON-данные по контрактам и проверкам для активных организаций из внутренних реестров. В запрос передаются ИНН/ОГРН, API-ключ передается параметром `key`. |
| Proxy-Tools | `https://proxy-tools.com/api/v1/proxies` | Служебная загрузка списка RU-прокси для парсеров. Используется только при заданном `PROXY_TOOLS_API_KEY`; запрос идет с Bearer-токеном. |
## Форматы загружаемых данных
Парсеры работают со следующими форматами:
- JSON-ответы публичных/платных API.
- Excel-файлы `.xlsx`/`.xlsm` с реестрами Минпромторга и бухгалтерской отчетностью ФНС.
- ZIP-архивы с XML/CSV/JSON/HTML/XLSX-файлами.
- XML-файлы выгрузок проверок и закупок.
- HTML-страницы официальных реестров с таблицами или карточками.
- CSV-файлы, в частности для ФСТЭК.
Скачанные файлы не исполняются как код: они читаются как данные, парсятся и сохраняются в БД.
## Передаваемые наружу параметры
Во внешние запросы могут уходить:
- периоды загрузки: год, месяц, дата;
- коды регионов;
- ИНН/ОГРН организаций из внутренних активных реестров;
- поисковая строка по названию организации для вакансий;
- служебные ключи API из окружения: `ZAKUPKI_TOKEN`, `CHECKO_API_KEY`, `SUPERJOB_APP_ID`, `PROXY_TOOLS_API_KEY`.
Ключи в коде не захардкожены, берутся из переменных окружения.
## Важные оговорки
- Для ряда задач предусмотрен параметр `file_url`. Если оператор передает его вручную, парсер скачивает файл по переданной ссылке, а не только по дефолтному адресу источника.
- Для ФНС текущая реализация backend не скачивает файлы автоматически с сайта ФНС, а обрабатывает уже полученные Excel/ZIP-файлы через папку наблюдения или API-загрузку.
- Для `proverki.gov.ru` возможен запуск headless Chromium через Playwright, потому что часть загрузок доступна через JS-интерфейс портала.
- Для ФСТЭК SSL-верификация отключена настройкой клиента источника.
- Runtime-прокси из БД используются только при включенном `PARSER_USE_RUNTIME_PROXIES=true`; отдельная задача синхронизации прокси обращается к Proxy-Tools только при наличии `PROXY_TOOLS_API_KEY`.