Веб-розробка

Датасет від AI-агентів: аудит знайшов 7 кодів, які мовчки ставали «дозволено»

21 липня 2026 ми додали в kvednace.com.ua таблицю вердиктів «чи можна КВЕД на єдиному податку», зібрану AI-агентами. Через 57 хвилин закомітили правки за незалежним аудитом: сім кодів у таблиці бракувало, і сервіс показував їх як дозволені. Чому пропуск виглядав як перевірена відповідь.

16 вересня 2026 р.
6 хв читання

21 липня 2026 року об 11:04 за UTC у репозиторії нашого сервісу kvednace.com.ua з'явилась нова функція: для кожного коду КВЕД сервіс почав показувати, чи можна вести таку діяльність на єдиному податку і в якій групі. О 12:01 того ж дня в тому ж репозиторії з'явився другий коміт, з правками за результатами незалежного аудиту даних. Між ними минуло 57 хвилин.

Цей текст про те, що знайшов аудит, чому цього не помітили під час збирання і як перевірити власний довідник, зібраний моделями, поки ним не почали користуватись люди. Податкових порад тут немає: яку групу обрати, вирішуєте ви разом із бухгалтером.

Як зібрали датасет і що про нього написали

Датасет — це таблиця вердиктів. У кожному рядку код КВЕД-2010, назва діяльності, рівень («дозволено», «лише 3 група», «частково», «заборонено»), підстава в Податковому кодексі, позначка, чи це пряма норма закону, чи тлумачення, і ступінь впевненості.

Збирали його AI-агенти. У шапці файлу записано: «зібрано й адверсарно перевірено дослідницьким пайплайном (18 агентів…)». Там само стоїть застереження, яке є і на сторінці сервісу: заборона в законі діє за фактичним видом діяльності, а код лише орієнтир.

Коли ми звірили опис із самим файлом, перша розбіжність знайшлась одразу. Повідомлення першого коміту обіцяє «87 вердиктів по кодах КВЕД-2010», а у файлі з того коміту 70 рядків. Сервіс від цього не ламався. Але розбіжність показала, що опис, який агент пише про власну роботу, перевіркою цієї роботи не є. Слова «адверсарно перевірено» в шапці теж.

Що знайшов аудит

Аудит запускали окремо від збирання. За повідомленням коміту з правками, його робили чотири аудитори, кожен на свою категорію, з установкою «не довіряй, перевіряй», а кожну знахідку потім окремо звіряли з кодексом і роз'ясненнями ДПС.

У заголовку коміту стоїть «8 правок». Якщо рахувати за списком у тому ж повідомленні, змін дев'ять:

  • сім кодів, яких у датасеті не було взагалі: 45.40 (торгівля мотоциклами), 46.39 (неспеціалізований опт продуктів, напоїв і тютюну), 29.20 (кузови й причепи), 30.91 (виробництво мотоциклів), 90.04 (концертні зали), 82.99 (серед іншого, незалежні аукціоністи), 01.15 (вирощування тютюну);
  • уточнена примітка до 71.20 (технічні випробування): заборона з кодексу стосується лише ФОП, а юридична особа на 3 групі такі роботи виконувати може;
  • виправлена функція, яка вирішує, чи показувати 4 групу.

Дві останні зміни пов'язані між собою. Код 01.15 належить до сільськогосподарських, для яких сервіс пропонує 4 групу. Коли вирощування тютюну отримало «заборонено», без правки логіки картка показувала б одночасно заборону на єдиному податку і доступну 4 групу.

Одну знахідку аудиту ми відхилили. Це 47.19, «Інші види роздрібної торгівлі в неспеціалізованих магазинах». Аудит пропонував позначити код як обмежений, але заборона тут залежить від фактичної операції, а не від коду, тож позначка на весь клас була б надмірною. Рядка для 47.19 так і немає, отже сервіс показує «дозволено».

Чому пропусків ніхто не помітив

Пропуск виглядав точнісінько як перевірена відповідь.

Логіка сервісу така: шукаємо рядок для коду; якщо його немає, шукаємо рядок для розділу (перші дві цифри); якщо немає і його, повертаємо «дозволено». Для більшості кодів це правильна відповідь, бо єдиний податок дозволяє більшість видів діяльності і прописувати сотні однакових рядків немає сенсу.

Проблема в іншому. «Рядка немає, бо все дозволено» і «рядка немає, бо його забули» на екрані не відрізнялись. Було навіть гірше: рядок, позначений як тлумачення, а не пряма норма, сервіс підписує «орієнтовно», а відсутній рядок такого підпису не отримує. Забутий код виглядав упевненіше за чесно позначений спірний. Єдина видима різниця: у картці без рядка немає пункту «Підстава».

Як саме агенти розподіляли роботу, ми не відтворюватимемо: журналу їхніх кроків у репозиторії немає. Наше пояснення таке. Пошук заборон породжує рядки, а перевірка рядків бачить лише те, що вже записано. Пропуск можна знайти тільки тоді, коли хтось іде від правила до кодів, а не від кодів до правила.

Скільки це зачепило

Цифри нижче ми порахували 16 вересня 2026 року скриптом, який повторює логіку сервісу, на версіях датасету до правок і після них. Це вплив на відповіді сервісу, а не на чиїсь рішення.

До аудиту Після
Рядків у датасеті 70 77
Кодів КВЕД-2010 (із 615), що мають свій рядок або рядок розділу 85 92
Кодів, які отримують «дозволено» без жодного рядка 530 523
Кодів NACE 2.1-UA (із 650), де вердикт змінився з «дозволено» — 27

Сім нових рядків змінили вердикт на 27 сторінках нових кодів, бо для нового коду сервіс бере найсуворіший вердикт серед старих кодів, які в нього переходять. Найбільше дав 82.99: у таблиці відповідності сервісу він розходиться на 24 нові коди.

Чи потрапила версія без правок на живий сайт за ці 57 хвилин, ми не звіряли, тому не стверджуємо, що хибний вердикт хтось побачив. Станом на 16 вересня 2026 року сторінка коду 45.40 на kvednace.com.ua показує «Дозволено частково» з підставою з кодексу.

Як перевірити власний довідник

Підходить для будь-якої таблиці, яку заповнювала модель: вердикти, сумісність запчастин, таблиці розмірів, правила доставки за регіонами. Перші два кроки — це швидка перевірка, яка дає найбільше. Решта — вже зміни в продукті й у тому, як ви ставите задачу аудиту.

  1. Знайдіть значення за замовчуванням. Пошукайте в коді ??, || , .get(key, default) чи гілку else після пошуку в таблиці. Запишіть, що отримує ключ, якого в таблиці немає.
  2. Порахуйте, скільки ключів потрапляє в цю гілку. Візьміть повний перелік (класифікатор, каталог, список міст) і проженіть кожен ключ через ту саму функцію пошуку, що й на сайті. У нас це 523 коди з 615. Саме число неважливе, важливо знати його і розуміти, чи всі ці ключі справді мають отримувати типову відповідь.
  3. Зробіть відсутність видимою. Хоча б у внутрішньому режимі показуйте «немає в довіднику» окремим станом, а не тим самим «так», що й для перевіреного рядка.
  4. Звірте опис із файлом. Скільки рядків обіцяє повідомлення коміту, README чи звіт агента, і скільки їх насправді. Вистачить grep -c по ключовому полю. У нас вийшло 87 проти 70.
  5. Дайте аудитору іншу задачу, ніж збирачу. Не «перевір ці рядки», а «ось правило, знайди всі ключі, яких воно стосується, і скажи, яких із них у таблиці немає».
  6. Записуйте відхилені знахідки разом із причиною. Наш 47.19 лежить у повідомленні коміту з поясненням, і наступний аудит не підніматиме його знову без нових аргументів.

Що ми змінили і чого це не виправило

Сім кодів додано, примітку до 71.20 уточнено, 4 група для забороненої діяльності більше не показується. Усе це лежить в одному коміті в історії репозиторію.

Сама конструкція лишилась: 523 коди, як і раніше, отримують «дозволено» без рядка, і на екрані це досі не відрізняється від перевіреного дозволу. Аудит закрив пропуски, які знайшов, але не довів, що інших немає. Тому на сторінці єдиного податку стоїть нагадування: заборона діє за фактичним видом діяльності, а не за самим кодом.

Власнику бізнесу з цієї історії варто винести одне: довідник за кодом не захищає від заборони за тим, що ви робите насправді. Якщо сервіс показує код як дозволений, торгувати під ним товаром, який кодекс забороняє на єдиному податку, однаково не можна.

Технічному читачеві інше: дані від AI треба перевіряти не лише на те, що в них записано, а й на те, чого в них бракує. Про схожу пастку в коді, коли результат виглядає правильним, а помилку ловить лише зовнішня перевірка, ми писали в розборі асистентів для розробки. А довідкові сервіси, де кожна сторінка відповідає на одне питання, ми робимо як бази знань.

Теги

AIАналітика

🤔Вам сподобалась стаття?

Ваша думка допомагає нам створювати кращий контент

Поділіться з друзями

Знайшли щось корисне? 🚀

Допоможіть іншим дізнатись про це — поділіться статтею в соціальних мережах

https://lionex.com.ua/blog/audyt-datasetu-vid-ai-ahentiv

💚 Дякуємо, що допомагаєте нам рости

Владислав Чистяков

Пише про те, що робить руками: інтернет-магазини на OpenCart, застосунки на Next.js, інтеграції та швидкість сайтів. У статтях — заміри й перевірки, які читач може повторити на своєму проєкті, а не загальні поради. Комерційна розробка з 2015 року.

Часті запитання

Відповіді на популярні питання по темі

Сім кодів КВЕД, яких у таблиці не було взагалі: 45.40, 46.39, 29.20, 30.91, 90.04, 82.99 і 01.15. Сервіс показував їх як дозволені, бо код без рядка отримує «дозволено» за замовчуванням. Крім того, аудит уточнив примітку до 71.20 і виправив логіку показу 4 групи.

На екрані «рядка немає, бо все дозволено» і «рядка немає, бо його забули» виглядали однаково. Спірні рядки сервіс підписує «орієнтовно», а відсутній рядок такого підпису не отримує, тож забутий код виглядав навіть упевненіше. Видимо бракувало лише пункту «Підстава».

Ні. Пропозицію обмежити код 47.19 відхилили: заборона там залежить від фактичної операції, а не від коду, тож позначка на весь клас була б надмірною. Причину записано в повідомленні коміту, щоб наступний аудит не піднімав це питання знову без нових аргументів.

Ні. Заборона на єдиному податку діє за фактичним видом діяльності, а не за зареєстрованим кодом, і довідник за кодом від неї не захищає. Навіть після аудиту більшість кодів отримують «дозволено» без окремого рядка. Яку групу обрати, вирішуйте разом із бухгалтером.

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

Отримуйте найкращі статті на пошту

Підпишіться на нашу розсилку та отримуйте корисні поради, інсайти та новини про веб-розробку, маркетинг та бізнес.

Ми поважаємо вашу приватність. Відписатись можна в будь-який момент.

Схожі статті

Всі статті
Сертифікати продовжуються самі: TLS на 116 сайтах і один, що не продовжився
Веб-розробка

Сертифікати продовжуються самі: TLS на 116 сайтах і один, що не продовжився

22 вересня 2026 року ми перевірили HTTPS-сертифікати на 116 сайтах, які вже міряли для ринкових вимірів, і для 104 з них порівняли стан із серпневим. Усі 116 пройшли перевірку, 108 стоять на 89- і 90-денних безкоштовних сертифікатах, і лише в одного сайту сертифікат досі не продовжився, хоча за типових налаштувань уже мав би. Розбираємо заміри, межі методу й показуємо, як перевірити свій сайт однією командою.

9 хв
22 вер.
Читати далі
Healthcheck дав 60 % запитів застосунку: що побачили в першу добу метрик
Веб-розробка

Healthcheck дав 60 % запитів застосунку: що побачили в першу добу метрик

21 вересня 2026 року, у першу добу обліку запитів за маршрутами, службовий /api/health отримав 13 666 запитів — 60 % трафіку застосунку, і кожен ішов у спільну базу. Розповідаємо, які два налаштування це прибрали, яку ціну маємо за них і як перевірити свій healthcheck.

9 хв
22 вер.
Читати далі
154 помилки типів, які викидала збірка: що в них знайшлось
Веб-розробка

154 помилки типів, які викидала збірка: що в них знайшлось

21 вересня 2026 року перевірка типів на нашому сайті показала 154 помилки, хоча збірка щоразу була зеленою: результат перевірки просто викидався. Усередині знайшлись нулі в статистиці посилань і в експорті аналітики, сортування, що не сортувало, і тести, які не запускались. Розповідаємо, як розбирали, що змінили і як перевірити свій проєкт.

9 хв
22 вер.
Читати далі