domovoy_bot/scraper_gis/ARCHITECTURE_V4_MASTER_PLAN.md

60 lines
5.2 KiB
Markdown
Raw Permalink 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.

# 🏛️ Архитектура Жнеца V4: "Магистр" (ТЗ и План Работ)
**Дата:** 02.05.2026
**Автор:** Gemini CLI (на базе глубокого анализа ошибок и логики Аристотеля)
**Цель:** 100% автономный сбор критически важных юридических документов (Информационные сообщения, Обращения, Договоры) с портала ГИС ЖКХ.
## 🔬 Анализ ошибок предыдущих версий
1. **Слепота к фреймам:** ГИС ЖКХ активно использует iframe и подгрузку контента через Angular. Обычные селекторы не срабатывали.
2. **Stale Element Reference:** При возврате из карточки документа назад в список (через кнопку "Назад"), Angular полностью перерисовывает страницу. Сохраненные ранее в памяти скрипта ссылки на документы уничтожались. Скрипт кликал "в пустоту" и падал.
3. **Отсутствие четкой последовательности:** Агент пытался быть "умным" и угадывать состояние, что приводило к хаотичным прыжкам между разделами.
4. **Игнорирование конкретных указаний пользователя:** Неумение распознать кнопку входа (когда куки живы) и неспособность пройти по четко заданным разделам.
## 🏗️ Новая Архитектура: Жесткий Маршрутизатор
Вместо того чтобы "угадывать" состояние страницы, робот будет работать как **Машина Состояний (FSM)** с четким линейным планом.
### Фаза 0: Авторизация и Инициализация
- Открываем `dom.gosuslugi.ru`.
- **Проверка входа:**
- Ищем кнопку "Выйти" или ФИО пользователя. Если есть -> Идем к Фазе 1.
- Ищем кнопку "Личный кабинет" или "Войти". Если есть -> Кликаем, ждем загрузки, проверяем вход.
- Если ничего не понятно -> Пишем в Телеграм: "Нужен логин руками", ждем 60 секунд.
### Фаза 1: Информационные сообщения (Уведомления)
*Юридически значимые оповещения.*
1. Переход в раздел уведомлений.
2. Ожидание полной загрузки таблицы.
3. Скриншот всего экрана (для фиксации дат).
4. Поиск и скачивание всех прикрепленных файлов (документы, PDF, ZIP).
5. Проверка пагинации -> если есть "Следующая", кликаем, скриншотим, скачиваем.
### Фаза 2: Обращения и ответы на них
*Переписка с госорганами и УК.*
1. Переход в раздел обращений.
2. Скриншот списка.
3. Получение количества обращений на текущей странице.
4. Цикл `for i in range(count)`:
- Находим список заново (защита от Stale Element).
- Кликаем на `i`-тое обращение.
- Скриншот карточки обращения.
- Поиск и скачивание всех прикрепленных файлов.
- Возврат назад (клик по "хлебным крошкам" или `page.go_back()`).
- Ожидание прогрузки списка.
5. Обработка пагинации.
### Фаза 3: Информация о договорах по дому
1. Переход в раздел договоров.
2. Нажатие кнопки "Найти" -> ожидание таблицы.
3. Цикл `for i in range(count)` (Аналогично Фазе 2):
- Заново ищем все ссылки "Договор...".
- Кликаем `i`-тую ссылку.
- Скриншот карточки.
- Поиск всех кнопок скачивания во всех фреймах.
- Загрузка в NAS (`gis_archive/contracts/[ИМЯ]/`).
- Генерация MD-отчета в Obsidian.
- Возврат назад, ожидание таблицы.
## 🛡️ Модуль Защиты и Отчетности
- **Playwright Persistent Context:** Куки сохраняются.
- **Smart Waiters:** Использование `wait_for_load_state("networkidle")` и случайных пауз (3-7 сек) для имитации человека.
- **Telegram Logging:** Отчет о начале каждой фазы, о скачивании каждого файла, о завершении миссии.