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 показує «Дозволено частково» з підставою з кодексу.
Як перевірити власний довідник
Підходить для будь-якої таблиці, яку заповнювала модель: вердикти, сумісність запчастин, таблиці розмірів, правила доставки за регіонами. Перші два кроки — це швидка перевірка, яка дає найбільше. Решта — вже зміни в продукті й у тому, як ви ставите задачу аудиту.
- Знайдіть значення за замовчуванням. Пошукайте в коді
??,||,.get(key, default)чи гілкуelseпісля пошуку в таблиці. Запишіть, що отримує ключ, якого в таблиці немає. - Порахуйте, скільки ключів потрапляє в цю гілку. Візьміть повний перелік (класифікатор, каталог, список міст) і проженіть кожен ключ через ту саму функцію пошуку, що й на сайті. У нас це 523 коди з 615. Саме число неважливе, важливо знати його і розуміти, чи всі ці ключі справді мають отримувати типову відповідь.
- Зробіть відсутність видимою. Хоча б у внутрішньому режимі показуйте «немає в довіднику» окремим станом, а не тим самим «так», що й для перевіреного рядка.
- Звірте опис із файлом. Скільки рядків обіцяє повідомлення коміту, README чи звіт агента, і скільки їх насправді. Вистачить
grep -cпо ключовому полю. У нас вийшло 87 проти 70. - Дайте аудитору іншу задачу, ніж збирачу. Не «перевір ці рядки», а «ось правило, знайди всі ключі, яких воно стосується, і скажи, яких із них у таблиці немає».
- Записуйте відхилені знахідки разом із причиною. Наш 47.19 лежить у повідомленні коміту з поясненням, і наступний аудит не підніматиме його знову без нових аргументів.
Що ми змінили і чого це не виправило
Сім кодів додано, примітку до 71.20 уточнено, 4 група для забороненої діяльності більше не показується. Усе це лежить в одному коміті в історії репозиторію.
Сама конструкція лишилась: 523 коди, як і раніше, отримують «дозволено» без рядка, і на екрані це досі не відрізняється від перевіреного дозволу. Аудит закрив пропуски, які знайшов, але не довів, що інших немає. Тому на сторінці єдиного податку стоїть нагадування: заборона діє за фактичним видом діяльності, а не за самим кодом.
Власнику бізнесу з цієї історії варто винести одне: довідник за кодом не захищає від заборони за тим, що ви робите насправді. Якщо сервіс показує код як дозволений, торгувати під ним товаром, який кодекс забороняє на єдиному податку, однаково не можна.
Технічному читачеві інше: дані від AI треба перевіряти не лише на те, що в них записано, а й на те, чого в них бракує. Про схожу пастку в коді, коли результат виглядає правильним, а помилку ловить лише зовнішня перевірка, ми писали в розборі асистентів для розробки. А довідкові сервіси, де кожна сторінка відповідає на одне питання, ми робимо як бази знань.




