# ТЕХНИЧЕСКАЯ СПЕЦИФИКАЦИЯ ## Система ETL MOSTOVIK Версия документа: 1.0 Дата: 2026-01-21 --- ## 1. НАЗНАЧЕНИЕ ПРОГРАММЫ ### 1.1. Общее назначение Система MOSTOVIK представляет собой ETL-платформу (Extract, Transform, Load) для автоматизированного сбора, обработки и хранения данных из государственных информационных систем и реестров. ### 1.2. Функциональное назначение Программа предназначена для решения следующих задач: - **Автоматический сбор данных** из государственных источников: - Минпромторг России (minpromtorg.gov.ru) — сертификаты промышленного производства, реестр производителей - Единый реестр проверок (proverki.gov.ru) — данные о проверках юридических лиц и ИП - Федеральная налоговая служба (ФНС) — бухгалтерская отчётность организаций - **Обработка и трансформация данных**: - Парсинг структурированных и неструктурированных данных - Нормализация форматов данных - Дедупликация записей - Валидация целостности данных - **Хранение и предоставление доступа**: - Централизованное хранение собранных данных - Предоставление данных через REST API - Ведение журнала загрузок и аудита - **Автоматизация процессов**: - Планирование периодических задач сбора данных - Мониторинг выполнения задач - Обработка ошибок и повторные попытки ### 1.3. Ограничения, накладываемые на область применения программы #### 1.3.1. Правовые ограничения Программа должна применяться в соответствии с требованиями: - Федерального закона от 27.07.2006 № 149-ФЗ «Об информации, информационных технологиях и о защите информации» - Федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных» - Положений об использовании данных государственных информационных систем - Лицензионных соглашений источников данных #### 1.3.2. Технические ограничения - **Частота обращения к источникам**: не чаще одного раза в сутки для каждого источника (согласно настройкам Celery beat) - **Объём обрабатываемых данных**: ограничен доступными системными ресурсами (ОЗУ, дисковое пространство) - **Время отклика источников**: зависит от доступности внешних API и веб-ресурсов - **Поддерживаемые форматы файлов**: - Excel (.xlsx) — для отчётов ФНС - JSON — для API-ответов - HTML — для веб-парсинга #### 1.3.3. Эксплуатационные ограничения - Требуется стабильное подключение к сети Интернет для доступа к внешним источникам - Работа с некоторыми источниками возможна только через браузерную автоматизацию (Playwright), что увеличивает требования к ресурсам - Не допускается одновременная работа нескольких экземпляров системы с одной базой данных без дополнительной настройки #### 1.3.4. Область неприменимости Программа не предназначена для: - Обработки данных в реальном времени - Работы с классифицированной информацией - Использования в качестве единственного источника истины для критически важных систем - Замены официальных запросов в государственные органы --- ## 2. УСЛОВИЯ ПРИМЕНЕНИЯ ### 2.1. Требования к необходимым для данной программы другим программам #### 2.1.1. Операционная система | Параметр | Минимальные требования | Рекомендуемые требования | |----------|----------------------|-------------------------| | ОС | Ubuntu 20.04 / Astra Linux Common Edition | Astra Linux Special Edition 1.7 | | Ядро Linux | 5.4+ | 5.15+ | #### 2.1.2. Системное программное обеспечение | Компонент | Версия | Назначение | |-----------|--------|------------| | Python | 3.11 | Язык программирования | | PostgreSQL | 15.10 | Система управления БД | | Redis | 7.x | Кеш и брокер сообщений | | Apache | 2.4.57 | Веб-сервер (HTTPS termination) | | Gunicorn | 21.2.0 | WSGI-сервер для Django | | Playwright | 1.57.0+ | Автоматизация браузера | #### 2.1.3. Библиотеки Python (основные) | Библиотека | Версия | Назначение | |------------|--------|------------| | Django | 3.2.25 | Веб-фреймворк | | Django REST Framework | 3.14.0 | REST API | | Celery | 5.3.6 | Очередь задач | | requests | 2.31.0 | HTTP-запросы | | pandas | 2.0.3 | Обработка табличных данных | | openpyxl | 3.1.5+ | Чтение Excel | | python-docx | 1.2.0+ | Чтение Word | | BeautifulSoup4 | 4.12.3 | Парсинг HTML | | Scrapy | 2.11.2 | Веб-скрапинг | | Selenium | 4.17.2 | Автоматизация браузера | #### 2.1.4. Дополнительные компоненты - **libpq-dev** — клиентская библиотека PostgreSQL - **libffi-dev** — Foreign Function Interface - **libxml2-dev, libxslt1-dev** — библиотеки для работы с XML - **zlib1g-dev** — библиотека сжатия - **build-essential** — компилятор и инструменты сборки ### 2.2. Требования к необходимым для данной программы техническим средствам #### 2.2.1. Минимальные аппаратные требования | Компонент | Требование | Примечание | |-----------|------------|------------| | Процессор | 2 ядра | x86_64 совместимый | | Оперативная память | 4 ГБ | При минимальной нагрузке | | Дисковое пространство | 20 ГБ | SSD рекомендуется | | Сетевой интерфейс | 100 Мбит/с | Для доступа к источникам | #### 2.2.2. Рекомендуемые аппаратные требования | Компонент | Требование | Примечание | |-----------|------------|------------| | Процессор | 4 ядра | Для параллельного выполнения задач | | Оперативная память | 8 ГБ | Для работы Playwright и обработки больших файлов | | Дисковое пространство | 50 ГБ SSD | Для БД, логов и медиафайлов | | Сетевой интерфейс | 1 Гбит/с | Для высокой пропускной способности | #### 2.2.3. Требования к инфраструктуре - **Доступ в Интернет**: обязательный для всех внешних источников - **Статический IP-адрес**: рекомендуется для production-развёртывания - **SSL/TLS сертификат**: обязателен для HTTPS-соединения - **Резервное питание**: рекомендуется для предотвращения потери данных #### 2.2.4. Требования к системе управления базами данных | Параметр | Значение | |----------|----------| | СУБД | PostgreSQL 15.10 | | Минимальный размер БД | 1 ГБ | | Рекомендуемый размер БД | 10 ГБ+ | | Максимальное количество подключений | 100 | | Режим изоляции | Read Committed (по умолчанию) | #### 2.2.5. Требования к системе кеширования | Параметр | Значение | |----------|----------| | Система | Redis 7.x | | Режим работы | in-memory с persistence (RDB/AOF) | | Выделенная память | 512 МБ — 2 ГБ | | Порты | 6379 (по умолчанию) | --- ## 3. ОПИСАНИЕ ЗАДАЧИ ### 3.1. Определение задачи #### 3.1.1. Общая характеристика Система MOSTOVIK решает задачу автоматизированного сбора и консолидации данных из распределённых государственных источников с целью создания единого централизованного хранилища для последующего анализа и использования. #### 3.1.2. Основные подзадачи **Извлечение данных (Extract):** - Подключение к удалённым источникам данных через HTTP/HTTPS - Авторизация и аутентификация в системах-источниках (при необходимости) - Получение данных в различных форматах (JSON, HTML, Excel) - Обход ограничений и защита от блокировок (proxy, rate limiting) **Трансформация данных (Transform):** - Парсинг сырых данных и извлечение структурированной информации - Нормализация форматов (даты, числовые значения, строки) - Валидация данных на соответствие ожидаемым схемам - Дедупликация записей по уникальным ключам - Обогащение данных метаданными (источник, время загрузки, batch ID) **Загрузка данных (Load):** - Сохранение обработанных данных в PostgreSQL - Ведение журнала загрузок (ParserLoadLog) - Отслеживание прогресса задач (BackgroundJob) - Индексация для ускорения поиска #### 3.1.3. Функциональные требования | ID | Требование | Описание | |----|------------|----------| | ФТ-001 | Автоматический сбор данных | Система должна автоматически собирать данные по расписанию | | ФТ-002 | Поддержка множественных источников | Система должна поддерживать подключение к различным источникам | | ФТ-003 | Обработка ошибок | Система должна обрабатывать ошибки сети и источников | | ФТ-004 | Повторные попытки | Система должна выполнять повторные попытки при сбоях | | ФТ-005 | Логирование | Система должна вести подробный журнал всех операций | | ФТ-006 | Мониторинг | Система должна предоставлять информацию о статусе задач | | ФТ-007 | REST API | Система должна предоставлять доступ к данным через API | | ФТ-008 | Дедупликация | Система должна предотвращать дублирование записей | ### 3.2. Методы решения задачи #### 3.2.1. Архитектурный подход Система построена по **ETL-архитектуре** с использованием следующих принципов: - **Модульность**: каждый источник данных реализуется в виде отдельного модуля - **Расширяемость**: новые источники добавляются без изменения ядра системы - **Асинхронность**: задачи выполняются фоново через очередь Celery - **Отказоустойчивость**: сохранение прогресса и повторные попытки при ошибках #### 3.2.2. Методы извлечения данных **HTTP-запросы (requests library):** Прямые запросы к API источников данных. **Веб-скрапинг (Scrapy, BeautifulSoup):** Парсинг HTML-страниц государственных сайтов. **Браузерная автоматизация (Playwright, Selenium):** Для JavaScript-рендеринга и динамических страниц. **Парсинг файлов (pandas, openpyxl):** Обработка Excel-файлов и других табличных форматов. #### 3.2.3. Методы трансформации данных **Нормализация:** - Приведение дат к единому формату (YYYY-MM-DD) - Очистка строк от лишних пробелов и символов - Стандартизация числовых форматов **Дедупликация:** Механизм update_or_create по уникальным ключам (ИНН, ОГРН, номер сертификата). **Валидация:** - Проверка обязательных полей - Валидация форматов (ИНН, ОГРН) - Проверка ссылочной целостности #### 3.2.4. Методы загрузки данных **Пакетная загрузка:** - Группировка записей по batch ID - Атомарное сохранение пакетов - Откат при ошибках **Потоковая обработка:** - Обработка больших файлов по частям - Прогресс-отслеживание - Кеширование промежуточных результатов #### 3.2.5. Методы планирования задач **Celery Beat (периодические задачи):** | Задача | Расписание | |--------|------------| | Парсинг Минпромторга | Ежедневно в 3:00 | | Парсинг реестра производителей | Ежедневно в 4:00 | | Синхронизация проверок | По мере необходимости | | Сканирование папки ФНС | Каждые 5 минут | **Управление очередями:** - Приоритизация задач - Распределение по workers - Мониторинг через Flower #### 3.2.6. Методы обеспечения надёжности **Логирование:** - Запись всех операций в ParserLoadLog - Детализация ошибок - Аудит действий пользователей **Мониторинг:** - Отслеживание статуса задач (BackgroundJob) - Прогресс выполнения (0–100%) - Уведомления об ошибках **Восстановление:** - Точки сохранения (checkpoints) - Повторные попытки с экспоненциальной задержкой - Резервное копирование БД --- ## 4. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ ### 4.1. Сведения о входных данных #### 4.1.1. Классификация входных данных | Тип | Источник | Формат | Периодичность | |-----|----------|--------|---------------| | Сертификаты промышленного производства | Минпромторг (API) | JSON | Ежедневно | | Реестр производителей | Минпромторг (веб) | HTML/JSON | Ежедневно | | Данные о проверках | proverki.gov.ru (веб) | HTML/JSON | По запросу | | Бухгалтерская отчётность | ФНС (файлы) | Excel (.xlsx) | По мере поступления | #### 4.1.2. Структура входных данных **Сертификаты Минпромторга:** - certificate_number: номер сертификата (строка) - issue_date: дата выдачи (YYYY-MM-DD) - expiry_date: дата окончания (YYYY-MM-DD) - organisation_name: название организации (текст) - inn: ИНН организации (строка) - ogrn: ОГРН организации (строка) - certificate_file_url: URL файла сертификата **Реестр производителей:** - inn: ИНН производителя - ogrn: ОГРН производителя - manufacturer_name: наименование производителя - address: юридический адрес - products: список продукции **Данные о проверках:** - inspection_id: идентификатор проверки - inspection_type: тип (294/248 ФЗ) - data_year: год данных - data_month: месяц данных - entity_name: название юридического лица - entity_inn: ИНН проверяемого лица - inspection_date: дата проверки - inspection_body: орган проведения проверки **Бухгалтерская отчётность (Excel):** - Период: отчётный период - Выручка: сумма выручки - Прибыль: сумма прибыли - Активы: сумма активов - Обязательства: сумма обязательств #### 4.1.3. Требования к качеству входных данных | Параметр | Требование | |----------|------------| | Полнота | Все обязательные поля должны быть заполнены | | Актуальность | Данные должны соответствовать текущему состоянию источника | | Консистентность | Данные должны соответствовать ожидаемой схеме | | Уникальность | Дубликаты должны быть идентифицируемы по ключевым полям | #### 4.1.4. Ограничения входных данных - **Максимальный размер файла**: 50 МБ (для Excel-файлов ФНС) - **Максимальное количество записей в пакете**: 10 000 - **Таймаут запроса к источнику**: 30 секунд - **Максимальное количество повторных попыток**: 3 ### 4.2. Сведения о выходных данных #### 4.2.1. Классификация выходных данных | Тип | Назначение | Формат | Способ доступа | |-----|------------|--------|----------------| | Нормализованные данные | Хранение в БД | PostgreSQL таблицы | Внутреннее API | | Данные для клиентов | REST API | JSON | HTTP/HTTPS | | Отчёты о загрузках | Аудит и мониторинг | PostgreSQL + логи | Django Admin, API | | Файлы выгрузки | Экспорт данных | CSV, Excel | По запросу | #### 4.2.2. Структура выходных данных **Таблицы базы данных:** | Таблица | Описание | Ключевые поля | |---------|----------|---------------| | parsers_industrial_certificate | Сертификаты Минпромторга | certificate_number, inn, ogrn | | parsers_manufacturer_record | Реестр производителей | inn, ogrn | | parsers_inspection_record | Проверки | inspection_id, entity_inn | | parsers_financial_report | Отчёты ФНС | external_id, ogrn | | parsers_load_log | Журнал загрузок | batch_id, source, status | | core_backgroundjob | Статус задач | task_id, status, progress | **REST API ответы:** Формат JSON с пагинацией: - count: общее количество записей - next: URL следующей страницы - previous: URL предыдущей страницы - results: массив объектов данных **Статус задачи (BackgroundJob):** - task_id: уникальный идентификатор задачи - task_name: имя задачи - status: статус (pending/running/completed/failed) - progress: прогресс выполнения (0-100) - message: текстовое сообщение - result: результат выполнения (JSON) - started_at: время начала - completed_at: время завершения **Лог загрузки (ParserLoadLog):** - batch_id: идентификатор пакета - source: источник данных - records_count: количество записей - status: статус загрузки - error_message: сообщение об ошибке - created_at: время создания #### 4.2.3. Требования к качеству выходных данных | Параметр | Требование | |----------|------------| | Целостность | Все внешние ключи должны быть валидны | | Консистентность | Данные должны соответствовать схеме БД | | Индексирование | Ключевые поля должны быть индексированы | | Аудит | Все изменения должны логироваться | #### 4.2.4. Форматы представления данных **JSON (REST API):** - Кодировка: UTF-8 - Формат дат: ISO 8601 - Пагинация: cursor-based или page-based **CSV (экспорт):** - Разделитель: точка с запятой (;) - Кодировка: UTF-8 - Заголовки: имена полей **Excel (экспорт):** - Формат: .xlsx - Кодировка: UTF-8 - Листы: по одному на таблицу #### 4.2.5. Объёмы выходных данных | Источник | Ожидаемый объём (мес.) | Рост (год) | |----------|----------------------|------------| | Сертификаты | 1 000 — 5 000 записей | ~50 000 записей | | Производители | 500 — 2 000 записей | ~20 000 записей | | Проверки | 5 000 — 20 000 записей | ~200 000 записей | | Отчёты ФНС | 100 — 500 файлов | ~5 000 файлов | --- ## ПРИЛОЖЕНИЕ А. ГЛОССАРИЙ | Термин | Определение | |--------|-------------| | ETL | Extract, Transform, Load — процесс извлечения, трансформации и загрузки данных | | Batch ID | Уникальный идентификатор пакета загруженных данных | | BackgroundJob | Фоновая задача с отслеживанием прогресса | | ParserLoadLog | Журнал загрузок парсеров | | Playwright | Библиотека для автоматизации браузера | | Celery | Распределённая очередь задач | | Django | Веб-фреймворк для разработки на Python | | REST API | Программный интерфейс на основе HTTP | | PostgreSQL | Реляционная система управления базами данных | | Redis | Система кеширования и брокер сообщений | --- *Документ составлен на основе версии кода от 2026-01-21*