Моніторинг законів Верховної Ради України IX скликання · ІЕД депутатів · рівень євроінтеграції · детектор синхронних інфоатак
🌐 Дашборд • 🤖 Telegram-бот • GitHub
Страж Демократії автоматично збирає всі законопроєкти ВРУ (15,000+), аналізує їх на ризики за допомогою ШІ, рахує Індекс ефективної діяльності (ІЕД) депутатів, відстежує рівень євроінтеграції України та виявляє скоординовані інформаційні атаки в telegram-каналах — і одразу повідомляє про них у Telegram.
| Компонент | Опис |
|---|---|
| 🔄 Синхронізація | 15,000+ законопроєктів з RADA API: статуси, хронологія, документи, автори, голосування (19,600+) |
| 🧠 LLM-аналіз | Двоетапний Chain-of-Thought аналіз ризиків (процедурний/непроцедурний → ризики), українською, з пост-перевірками |
| 📊 ІЕД депутатів | 6 рівних категорій (C1–C6) з опублікованою методологією v2.1 — жодних прихованих ваг |
| 🇪🇺 Євроінтеграція | Гіпотетичний індекс 0–100: переговорний трек (статуси кластерів, авто-детекція відкриттів з RSS ЄК) + гармонізація законодавства |
| 🛡 Детектор інфоатак | Кластеризація постів ~20 деструктивних каналів (список СБУ) + фактчекерів; бьорст-детекція синхронних хвиль → пуш з посиланням на спростування |
| 📱 Telegram | Бот з командами (/bill, /dep, /top, /eu, /attacks, /fakes), персональні підписки на атаки та дайджести, щоденні зведення |
| 📅 Графік | Календар усіх активностей ВРУ: пленарні, комітети, голосування, свята, події ЄС |
┌────────────────────── VPS (Python + Node) ──────────────────────┐
│ │
│ СИНХРОНІЗАЦІЯ (17 systemd timers) │
│ sync_bills / sync_bill_passings_html → bills, passings │
│ sync_votes_bulk → votes, mp_votes (7.5M) │
│ sync_mp_factions/stats → mps (460 депутатів) │
│ sync_schedule_legacy / sync_committee_schedule → графік │
│ sync_eu_tracker → статуси кластерів ЄС (авто з RSS ЄК) │
│ sync_info_monitor → інфопотік (RSS фактчекерів + t.me/s) │
│ sync_disinfo_channels → щоденне оновлення списку каналів │
│ │
│ АНАЛІЗ │
│ night_batch (21:00–08:00, 3 воркери) → LLM ризики │
│ calc_kpi_v12 → ІЕД · calc_harmonization → EU index │
│ detect_attacks (кожні 30 хв) → бьорст-детектор + TG-пуш │
│ label_narratives (07:15) → LLM-розмітка нарративів дня │
│ │
│ API: Express (порт 8788) ── Cloudflare Tunnel ──► api.dino.pp.ua│
└──────────────────────────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ PostgreSQL 18.4 (192.168.1.244/radacleaner) │
│ bills · risk_assessments · mps · mp_votes · eu_cluster_status│
│ info_items · attack_alerts · bot_subscribers · rada_schedule │
└──────────────────────────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ CLOUDFLARE PAGES — дашборд (Vanilla JS SPA) │
│ Дашборд · Закони · Депутати · Графік · EU Alignment · │
│ 🛡 Інфоатаки · 🤖 Бот │
└─────────────────────────────────────────────────────────────────┘
| Шар | Технологія |
|---|---|
| Бекенд | Python 3 (syncs/аналіз) + Express/Node.js (API) |
| База | PostgreSQL 18.4 |
| Фронтенд | Vanilla HTML/CSS/JS (Cloudflare Pages) |
| LLM | nvidia/nemotron-3-super-120b-a12b:free через OpenRouter (+ NVIDIA, Gemini fallback) |
| Сповіщення | Telegram Bot API |
| Тести | pytest, 80 тестів (venv/bin/python -m pytest tests/ -q) |
6 рівних категорій, без ваг: ІЕД = (C1+C2+C3+C4+C5+C6) / 6 × 100
| # | Категорія | Джерело |
|---|---|---|
| C1 | Дисципліна (явка, голосування, дисципліна фракції) | mp_votes |
| C2 | Законотворчість (якість, ризик, документи, авторство) | risk_assessments |
| C3 | Результативність (прийняття своїх законів) | bill_sponsors |
| C4 | Комітет (публічна монотонна шкала ролей 40–100) | committee_members |
| C5 | Звернення (депутатські запити + відповіді) | itd.rada.gov.ua |
| C6 | Вплив (низький ризик + євроінтеграційний слід) | risk_assessments + EU |
Методологія v2.1 повністю опублікована на дашборді (футер кожної сторінки) — разом із дослівним промптом ШІ-аналізу. При зміні формул — bump версії.
INDEX = 0.5 × Перемовини + 0.5 × Гармонізація
Перемовини = статуси 6 кластерів (не відкритий=0, відкритий=50, закритий=100)
— авто-детекція відкриттів з RSS Єврокомісії
Гармонізація = частка прийнятих законів серед EU-релевантних
Станом на серпень 2026: 23.9% (відкриті кластери 1 «Основи» 15.06.2026 та 6 «Зовнішні відносини» 14.07.2026). Методологія опублікована на дашборді.
Ключова фішка проєкту: швидкість — хвилини замість денного циклу фактчекерів.
- Збір (кожні 30 хв): 5 RSS фактчекерів (ЦПД, VoxCheck, StopFake,
Детектор медіа, SPRAVDI) + ~20 каналів зі списку СБУ через публічний
t.me/s(MTProto не використовуємо — ToS Telegram) - Кластеризація: simhash + token-Jaccard (union-find, чистий Python)
- Бьорст-правило: ≥4 різних TG-каналів, ≥8 постів, вікно ≤24 год → алерт
- Пуш: наратив + масштаб + приклад + посилання на спростування фактчекерів + номер закону з нашої БД. Дисклеймер: вердикт — за фактчекерами
- Щодня 07:15: LLM-розмітка нарративів дня + ТОП перевірок → вкладка «🛡 Інфоатаки»
Список каналів оновлюється щодня автоматично (джерело СБУ через 5.ua, резолвинг нових каналів через власний SearXNG, prune мертвих).
radacleaner/
├── src/ # llm_client, d1_client, prompts, telegram_notifier
├── worker/api-server.js # Express API (порт 8788, PostgreSQL)
├── dashboard/index.html # Дашборд (SPA, 7 вкладок)
├── systemd/ # усі unit-файли (17 таймерів + 4 демони)
├── migrations/ # PostgreSQL міграції (025)
├── tests/ # pytest (80 тестів)
├── data/disinfo_channels.json # канали моніторингу детектора
├── sync_*.py # синхронізації (bills, votes, mps, schedule, EU, info)
├── calc_kpi_v12.py # ІЕД
├── calc_harmonization.py # гармонізація + EU Integration Index
├── detect_attacks.py # бьорст-детектор інфоатак
├── label_narratives.py # нічна LLM-розмітка нарративів
├── night_batch.py # нічний LLM-аналіз (3 воркери)
├── daily_digest_llm.py # щоденний дайджест (детермінований, без LLM)
├── weekly_digest.py # щотижневий дайджест (пн 08:00)
├── monitor.py # Telegram-сповіщення з change_log
└── telegram_bot.py # інтерактивний бот + персональні підписки
| Ендпоінт | Опис |
|---|---|
GET /api/bills, /api/bills/:id |
Закони: пошук, деталі, ризики, хронологія |
GET /api/deputies, /api/deputies/:name |
Депутати + ІЕД v12 |
GET /api/eu-alignment |
EU Integration Index + кластери + таймлайн + новини |
GET /api/schedule, /api/activity-calendar |
Графік ВРУ + активності |
GET /api/info-digest |
Нарративи дня, атаки, ТОП фактчеків |
GET /api/dashboard |
Уніфікований блок головної |
git clone https://github.com/Dinollee/radacleaner.git
cd radacleaner
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # DB_HOST, TG_BOT_TOKEN, OPENROUTER_API_KEY...
venv/bin/python -m pytest tests/ -qДеплой дашборда: npx wrangler pages deploy dashboard --project-name radacleaner-dashboard
MIT