← Раздел «ИИ на практике»

Инструмент JB Solutions · MacroRadar

Ставка, инфляция и бюджет разложены по десяткам сайтов и PDF. Сводит их руками каждый, кому нужно решение

MacroRadar каждый день обходит официальные источники Казахстана: Нацбанк, Бюро нацстатистики, Комитет госдоходов, Минфин, World Bank. То, что раньше было отчётом раз в квартал, теперь шесть страниц с датой и ссылкой на источник под каждой цифрой. Если источник не ответил, страница не пустеет: остаётся прошлое значение с пометкой, что оно устарело.

Что это

Программа, которая ежедневно собирает открытые макроэкономические данные Казахстана и публикует их на шести страницах: хаб и пять самостоятельных тем, экономика, внешняя торговля, Национальный фонд, бюджет, налоги. Ни одна цифра не набрана вручную. За каждой стоит модуль, который тянет её из первоисточника, и гейт, проверяющий, что значение правдоподобно и не устарело, прежде чем оно попадёт на страницу.

Как устроено

Код открытый, поэтому ниже то, что реально делают модули репозитория, без рекламных формулировок.

  1. Свой модуль на каждый первоисточник

    World Bank и официальные курсы НБРК тянет etl.py. Товарооборот и структуру торговли по странам и товарным группам собирает trade.py из World Bank и UN Comtrade. Поступления в бюджет по областям разбирает xlsx Комитета госдоходов budget.py. Помесячное исполнение бюджета берёт из отчётов Минфина minfin.py, областной разрез читает статистический бюллетень Минфина oblast.py, валютные активы и доходность фонда собирает national_fund.py. Справочник налоговых ставок tax.py считает из Налогового кодекса и базовых величин МРП и МЗП: готовых чисел он не хранит.

  2. Гейт правдоподобия на входе

    Каждый новый ряд проверяется до того, как его вообще рассматривают: даты уникальны и идут по порядку, значения конечны, величина укладывается в заданный для этого показателя диапазон. Диапазон здесь это граница здравого смысла: за ней источник обычно сменил единицу измерения или отдал мусор.

  3. Источник не ответил, ряд не пропадает

    Если источник недоступен или новое значение не проходит гейт, страница не остаётся пустой и не показывает ноль. Берётся последнее опубликованное значение, ему ставится пометка устаревания и записывается причина, почему обновление не прошло.

  4. Вывод «что это значит» это правило по порогам

    Два снижения базовой ставки НБРК подряд дают вывод «цикл смягчения», инфляция выше цели Нацбанка даёт «закладывайте индексацию». Правила открыты в коде радара и работают детерминированно: для одних и тех же входных данных проверка порогов всегда даёт один и тот же вывод, без участия языковой модели.

  5. Гейт качества перед публикацией страницы

    Отдельная проверка идёт по каждой из шести страниц: ровно один заголовок h1, canonical на правильный адрес, у хаба ровно пять карточек на темы, в шапке темы ссылки на все соседние. Дальше проверка наполнения: в каждой секции считаются числа, строки таблиц, графики и пункты списков, и результат сверяется с минимумом, снятым со здоровых страниц. Пустой график, таблица без строк данных или нерезолвленное значение вроде «None» останавливают публикацию.

  6. Сборка раз в сутки, и гейт это не совет

    Задача в GitHub Actions по расписанию, каждый день в 09:00 по Астане, прогоняет все модули заново и запускает проверку. Если проверка падает, шаг workflow останавливается: коммит с новыми данными не создаётся и не пушится, на проде остаётся предыдущая, ещё живая версия страницы.

Шесть страниц работают прямо сейчас

Не демонстрация на выдуманных данных: это те же страницы, которые каждый день видят посетители jbs.finance.

Что остаётся после прогона

Таблица источников на каждой теме

В разделе «Источники и свежесть» перечислены все ряды, которые видны на странице: источник, дата последнего наблюдения, момент, когда данные забирались, и статус, свежий или устаревший. Расхождение видно сразу на странице, до звонка клиента.

Лента «что изменилось» без ручной редактуры

На странице экономики короткая лента событий строится из самих рядов: снижение ставки, всплеск инфляции, разворот курса. Формирует её сравнение свежего значения с предыдущим, зашитое в код. Руками эту ленту никто не собирает.

Чего он не делает

  • Не прогноз. Радар показывает, что уже произошло и где значение стоит относительно порога. Куда показатель пойдёт дальше, решает не код.
  • Не инвестиционная и не налоговая рекомендация. Справочник ставок и цифры бюджета дают контекст для решения. Само решение и ответственность за него остаются за тем, кто его принимает.
  • Не заменяет экономиста. Пороги в коде фиксируют направление и масштаб движения показателя. Объяснение, почему это случилось и что с этим делать конкретному бизнесу, требует человека, который знает контекст компании.
  • Данные настолько свежие, насколько их публикует источник. Комитет госдоходов публикует отчётность с лагом больше года, отчёт Минфина об исполнении бюджета выходит раз в месяц. Задержку даёт источник: сама сборка отрабатывает каждый день исправно.

Порядок цифр

Тем радара

6

Хаб и пять самостоятельных тем, у каждой свой адрес и свой h1.

Порог свежести

24 часа

Без успешного обновления дольше гейт публикации останавливает сборку.

Автотестов в репозитории

306

В 13 файлах, отдельно от гейта самих страниц.

Как мы поймали его на слабости

Областной разрез бюджета когда-то собирался обходом двадцати сайтов управлений финансов: у каждой области свой адрес на gov.kz, своя форма, свой ритм публикации. На деле набиралось тринадцать регионов из двадцати, а периоды у них расходились на годы, общий порядок из таких цифр не строился. Слабость поймали при сравнении со статистическим бюллетенем Минфина, где те же данные публикуются централизованно: один файл в месяц, один период на все области, план и факт рядом. Модуль, обходивший сайты по одному, заменили разбором этого бюллетеня.

Вторую слабость поймали уже в самой публикации, дело было не в данных. Разметка страницы бывает целой при пустом содержимом: вырезанный main, секция без единого числа, график без единой точки. Такие сборки уезжали на прод с кодом завершения ноль, потому что структурная проверка видела на месте все теги и не смотрела внутрь них. После этого рядом со структурными проверками появились проверки наполнения: минимум чисел, строк и графиков на каждую секцию, снятый со здоровых страниц с запасом вниз, и отдельная проверка на нерезолвленные значения вроде «None» или «nan» в видимом тексте.

Почему мы это собрали

Мне надоело объяснять клиентам ставку и инфляцию по данным недельной давности, потому что открытые источники разбросаны по десяткам сайтов и PDF, а собирать эту подборку руками каждое утро не станет никто. Радар не придумывает выводы. Он каждый день честно забирает то, что и так лежит в открытом доступе, и подписывает источник и дату под каждой цифрой.

Багдат Жаксыгелдин, основатель JB Solutions. О себе

Разобраться с ИИ самому

Такой инструмент собирается из готовых кубиков. Что это за кубики, разбирается в открытых курсах.

Три способа получить радар

Цену обсуждаем индивидуально: масштаб настройки и состав источников у каждого свои.

Поднять самому бесплатно
Код открытый, лицензия MIT. github.com/jbs-finance/macroradar →
Настройка под вашу инфраструктуру
JB Solutions поднимает и настраивает готовый радар под ваши источники и серверы. Обсудить задачу →
Радар под свой рынок или свои данные
Тот же движок на других источниках: отраслевой радар или радар по данным компании, продажи против рынка, цены поставщиков против инфляции, план против факта. Обсудить задачу →