yust.ai

Скільки законів в Україні?

Володимир Шельмук · Засновник Юстай

Це питання звучить просто, але насправді на нього неможливо відповісти одним числом. У реєстрі Верховної Ради — майже триста тисяч документів. Частина чинна. Частина втратила силу ще у 90-х. Частина — взагалі не "закони" в побутовому розумінні, а постанови, накази, укази, циркуляри. І в кожному документі — десятки версій під різні редакції.

Ми будуємо для Yustai пайплайн, який щоночі тягне ці дані з відкритих джерел Ради, фільтрує, нарізає та векторизує — і змушені на ці питання відповідати ребром. Цей пост — про те, як виглядає українське законодавство, коли дивитися на нього як на структуровані відкриті дані, і як ми вирішуємо, що з цього взагалі варто індексувати.

Що рахуємо: типи актів у реєстрі Ради

Рада публікує повний каталог документів CSV-файлом за адресою:

https://data.rada.gov.ua/ogd/zak/laws/data/csv/doc.txt

У файлі — кожен документ із полями: реєстраційний номер (nreg), назва, тип, статус, орган видання, дати. Файл у кодуванні cp1251, з роздільником-табом — типовий артефакт української держави початку 2000-х. Конвертуємо в UTF-8 ще на льоту.

Тип документа (поле doktype) — це число, і чисел цих чимало. Найважливіші для нас чотири:

Код Що це
1 Закон України
21 Кодекс України
216 Конституція України
2 Постанова (Кабміну або Верховної Ради)

Усе інше — укази Президента, накази міністерств, інструкції, листи роз’яснення, рішення Конституційного Суду — це ще десяток типів. У внутрішній моделі ми зводимо їх у дві категорії: LAW (типи 1, 21, 216) і BYLAW (все підзаконне). Ця ж дихотомія керує тим, наскільки сильно ми довіряємо документу при формуванні відповіді.

Що значить "чинний": сім статусів і чому це важливо

У Ради є власний довідник статусів (stan.txt), і він має сім значень:

Код Статус
0 Невизначений
1 Втратив чинність
2 Набирає чинності
3 Дію зупинено
4 Дію відновлено
5 Діє
6 Не набрав чинності
7 Не застосовується на території України

Для пошуку ми беремо тільки 5 — Діє. Усі інші — або історія, або ще не вступило в силу, або (для актів СРСР) скасовано законом про декомунізацію.

Що значить "тимчасовий": дати на рівні редакцій

Закони не лише з’являються та зникають — вони змінюються. Кодекс України про адміністративні правопорушення в редакції 2010 року і в редакції 2024-го — це формально один реєстраційний номер, але помітно різні правила гри.

У нашій схемі кожна редакція має дві дати:

  • valid_from — коли редакція набрала чинності,
  • valid_to — коли її замінила наступна або документ втратив чинність.

valid_to IS NULL означає, що редакція актуальна. Коли з’являється нова редакція, ми не перезаписуємо стару — ми закриваємо її і створюємо нову з новим valid_from. Так само коли документ втрачає чинність цілком: усі його чинні редакції закриваються однією датою.

З цього випливає важлива річ для будь-якої системи, яка хоче давати юридичні відповіді: посилання повинно вказувати на конкретну редакцію, а не на "закон взагалі". Інакше ви ризикуєте показати редакцію 2018 року на питання, де користувачу принципово важлива редакція 2024-го. Це не теорія — це історії з реальних консультацій, де "та сама норма" по факту вже два роки як перетворилася на щось зовсім інше.

Класифікація: 1043 тематичні вузли

Окремо від статусів і типів Рада публікує класифікатор тематикиklasname.txt (назви) і klastree.txt (дерево). Це 1043 вузли, від найзагальніших ("Цивільне право") до доволі вузьких ("Договір страхування фінансових ризиків"). Кожен документ у картці (https://data.rada.gov.ua/laws/card/{nreg}.json, поле klasy) має нуль або більше прив’язок до цих вузлів.

Ми синхронізуємо це дерево в окрему таблицю й тримаємо junction-таблицю прив’язок документ↔класифікатор. На запит "знайди мені все по страхуванню" це дає можливість обмежити простір пошуку ще на етапі фільтрації, до того як вмикається векторний пошук. Окрім klasy, з тих самих ендпоінтів забираємо словник тем (temy.txt), теґів (tags.txt), термінів (term/names.txt, term/terms.txt).

Звідки беремо все це: повний список відкритих джерел

Підсумуємо. Усе, на чому стоїть пайплайн Yustai — публічно доступне:

Що Звідки
Повний каталог документів https://data.rada.gov.ua/ogd/zak/laws/data/csv/doc.txt
Картка документа (метадані, klasy) https://data.rada.gov.ua/laws/card/{nreg}.json
Класифікатор: назви https://data.rada.gov.ua/ogd/zak/klasname.txt
Класифікатор: дерево https://data.rada.gov.ua/ogd/zak/klastree.txt
Теми https://data.rada.gov.ua/ogd/zak/temy.txt
Теґи https://data.rada.gov.ua/ogd/zak/tags.txt
Відношення між документами https://data.rada.gov.ua/ogd/zak/vidnosh.txt
Терміни (назви, визначення, прив’язки) https://data.rada.gov.ua/ogd/zak/term/names.txt, term/terms.txt, term/docs.txt
Довідник статусів https://data.rada.gov.ua/ogd/zak/stan.txt
Загальний портал відкритих даних https://data.gov.ua/

Усе у вільному доступі, без реєстрації, без ключів API. Здебільшого — у кодуванні cp1251, з табами як роздільником, що додає трохи спорту, але загалом ці дані вражаюче добре структуровані як для державних реєстрів.

І все ж: скільки законів?

Тепер можна відповісти не прикидкою, а цифрами. Ось що дає свіжий doc.txt станом на 20 серпня 2026 року:

Фільтр Кількість
Усього записів у каталозі 294 045
Зі статусом "Діє" (будь-який тип документа) 121 723
Закони, кодекси, Конституція (типи 1, 21, 216) — за всю історію 8 306
Закони, кодекси, Конституція зі статусом "Діє" 6 801
Для порівняння: чинні постанови (тип 2) 35 989

Тобто чинних законів у строгому сенсі — 6 801: Конституція, кодекси і звичайні закони. І навіть тут реєстр підкидає нюанс: записів із типом "кодекс" серед чинних — 24, але Кодекс України про адміністративні правопорушення живе в реєстрі трьома записами (основний плюс два історичні, на які колись розбили його давні редакції), тож фактично чинних кодексів — 22.

Тому коли наступного разу почуєте в новинах "в Україні діє сто тисяч законів" — питайте, що саме малося на увазі. Якщо закони в строгому сенсі — їх зараз близько семи тисяч. Якщо будь-який чинний документ у реєстрі — понад сто двадцять тисяч. Бо ця нібито проста цифра — насправді результат вибору фільтрів, який мав би бути явним. Ми у відкритих даних маємо все, щоб ці фільтри показувати — і Yustai намагається бути системою, в якій вони видимі за замовчуванням.