Илья Шкура
EN UK RU

Заметки · 25 сентября 2026

Одна разумная строка кода и восемь неверных цифр.

Владелец магазина выгружает из Shopify заказы за квартал и отдаёт файл ИИ-ассистенту, который умеет запускать Python. Просит то, что попросил бы любой владелец: ключевые цифры квартала, «точные, для презентации инвестору». Ассистент возвращает аккуратный отчёт со 113 цифрами.

Выгрузка в этом тесте синтетическая, но в настоящем формате Shopify: 21 687 строк и 9 659 заказов, со всем беспорядком реальной выгрузки — пересекающимися загрузками, отменёнными, тестовыми и служебными заказами, ценами с НДС. Раз данные сгенерированы, правильные ответы известны заранее.

Что нашёл пересчёт

Из 113 цифр для 35 у отдельного проверочного кода есть определение. 27 из них сошлись до цента, 8 — нет. Остальные 78 перечислены с объяснением, почему их нельзя пересчитать: другое определение, разбивка, которую проверочный код не считает, или описание того, как чистили данные.

Все восемь расхождений идут от одной строки в коде ассистента:

q['refund_prod'] = q['Refunded Amount'] * q['Subtotal'] / q['Total']

Она вычитает из каждого возврата пропорциональную долю доставки. Для 364 полных возвратов это верно: доставку в них тоже вернули. Но 439 частичных возвратов в этой выгрузке касаются только товаров, и из них строка вычла доставку, которую никто не возвращал. В итоге возвраты за квартал занижены на 505,35 €, а чистые продажи завышены: по месяцам на 207,78, 149,19 и 148,38 €, за квартал на 505,35 € и на столько же в канале интернет-магазина.

Почему повторное чтение этого не поймает

  • Строка выглядит как разумное допущение. Из выгрузки не понять, входила ли доставка в частичный возврат, так что решать приходилось в любом случае. Здесь это решили молча, в комментарии к коду, о котором в отчёте нет ни слова.
  • Если перечитывать тот же код, разделяешь то же допущение. Отдельный код, который не видел отчёта, его не разделяет.
  • 505 € — немного на фоне 1,47 млн €. Но цифра, которую увидит инвестор, либо совпадает с данными, либо нет.

Какой вывод я делаю

До подсчёта нужно записать определения и попросить владельца ответить на вопросы, на которые данные не отвечают: входит ли доставка в частичный возврат, входит ли НДС в чистые продажи, какую дату считать. Потом пересчитать всё, что можно пересчитать, и прямо назвать то, что пересчитать нельзя, с причиной.

Кейс целиком, с таблицей всех восьми цифр: ИИ-отчёт о продажах: 35 цифр пересчитано, 8 неверны.