feat(macro): CBR inflation (ИПЦ) + activate §9.5 inflation channel (#946) #1162

Merged
bot-backend merged 1 commit from feat/cbr-inflation-macro-946 into main 2026-06-08 06:41:51 +00:00
Collaborator

Что

Добивает инфляционный вход #946 через ЦБ РФ (fedstat ИПЦ был за reCAPTCHA → ЦБ публикует инфляцию ОТКРЫТО). И не просто landит данные — активирует ранее-деградировавший §9.5-канал прогноза.

Источник (reproducible, не reCAPTCHA)

https://www.cbr.ru/Queries/UniDbQuery/DownloadExcel/132934 — Excel за /hd_base/infl/, колонка «Инфляция, % г/г», месячный, region=rf, вся история 2013→. (HTML-таблица отдаёт только ~6 мес → Excel-эндпоинт = полный источник.) Live-проверено: 2026-04 → 5.58%.

Содержимое

  • cbr_macro.py: fetch_inflation + pure parse_inflation_xlsx (берёт «Инфляция», НЕ «Цель»/«Ключевая ставка»; graceful).
  • cbr_macro_sync: upsert inflation_yoy (SAVEPOINT-per-row, CAST not ::, ON CONFLICT по PK, per-series guard — инфляция падает, ставка всё равно апсертится), на существующем weekly-beat.
  • macro_series.py: inflation_yoy в MonthlyMacro (frozen, carry-forward).
  • macro_coefficient.py §9.5: f_inflation — level vs 4% цель ЦБ, demand-suppressing выше цели, non-positive (анти-double-count с f_rate; исключён из _RATE_DRIVEN_FACTORS). Зарезервированный _W_INFLATION=0.08 канал был DEGRADED → теперь BACKED+consumed; _CONF_HIGH_MIN_BACKED 4→5.

Качество

  • code-reviewer: APPROVE — forecast-math gate пройден: экономически верно, no double-count (non-positive clamp + не в rate-driven), детерминизм §16/§26, активация канала аддитивна по renorm-схеме (как задумано). Parse/upsert/cache-interaction (#1129) корректны, MonthlyMacro остаётся frozen. 194 macro + 902 forecasting тестов зелёные, ruff, без миграции/deps. NON-colliding (макро, не parcels.py/ИРД).

Post-deploy

Первый cbr_macro_sync (Monday-beat или ручной триггер) забэкфиллит инфляцию 2013→ → канал активируется. Forecast-числа сдвинутся для участков с инфляц-данными (выше-цель CPI → чуть более суппрессивный коэф — directionally sound). Backtest активированного канала — естественный follow-up (не блокер, веса advisory).

Refs #946.

## Что Добивает инфляционный вход #946 через **ЦБ РФ** (fedstat ИПЦ был за reCAPTCHA → ЦБ публикует инфляцию ОТКРЫТО). И не просто landит данные — **активирует ранее-деградировавший §9.5-канал прогноза**. ## Источник (reproducible, не reCAPTCHA) `https://www.cbr.ru/Queries/UniDbQuery/DownloadExcel/132934` — Excel за `/hd_base/infl/`, колонка «Инфляция, % г/г», месячный, region=rf, вся история 2013→. (HTML-таблица отдаёт только ~6 мес → Excel-эндпоинт = полный источник.) Live-проверено: 2026-04 → 5.58%. ## Содержимое - `cbr_macro.py`: `fetch_inflation` + pure `parse_inflation_xlsx` (берёт «Инфляция», НЕ «Цель»/«Ключевая ставка»; graceful). - `cbr_macro_sync`: upsert `inflation_yoy` (SAVEPOINT-per-row, CAST not ::, ON CONFLICT по PK, per-series guard — инфляция падает, ставка всё равно апсертится), на существующем weekly-beat. - `macro_series.py`: `inflation_yoy` в `MonthlyMacro` (frozen, carry-forward). - **`macro_coefficient.py` §9.5: `f_inflation`** — level vs 4% цель ЦБ, demand-suppressing выше цели, **non-positive (анти-double-count с f_rate; исключён из _RATE_DRIVEN_FACTORS)**. Зарезервированный `_W_INFLATION=0.08` канал был DEGRADED → теперь BACKED+consumed; `_CONF_HIGH_MIN_BACKED` 4→5. ## Качество - `code-reviewer`: ✅ APPROVE — forecast-math gate пройден: экономически верно, no double-count (non-positive clamp + не в rate-driven), детерминизм §16/§26, активация канала аддитивна по renorm-схеме (как задумано). Parse/upsert/cache-interaction (#1129) корректны, MonthlyMacro остаётся frozen. **194 macro + 902 forecasting тестов зелёные**, ruff, без миграции/deps. NON-colliding (макро, не parcels.py/ИРД). ## Post-deploy Первый `cbr_macro_sync` (Monday-beat или ручной триггер) забэкфиллит инфляцию 2013→ → канал активируется. Forecast-числа сдвинутся для участков с инфляц-данными (выше-цель CPI → чуть более суппрессивный коэф — directionally sound). Backtest активированного канала — естественный follow-up (не блокер, веса advisory). Refs #946.
bot-backend added the
analytics
scope/backend
GG-форсайт
site-finder
labels 2026-06-08 06:41:48 +00:00
bot-backend added 1 commit 2026-06-08 06:41:49 +00:00
feat(macro): CBR inflation (ИПЦ YoY) -> macro_indicator + activate §9.5 channel (#946)
All checks were successful
CI / frontend-tests (pull_request) Has been skipped
Deploy / changes (push) Successful in 6s
Deploy / build-backend (push) Successful in 1m45s
Deploy / build-frontend (push) Has been skipped
Deploy / build-worker (push) Successful in 2m42s
CI / changes (push) Successful in 6s
CI / frontend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 6s
Deploy / deploy (push) Successful in 1m15s
CI / backend-tests (push) Successful in 6m30s
CI / backend-tests (pull_request) Successful in 6m32s
25e21c2bff
fedstat ИПЦ is reCAPTCHA-blocked; CBR publishes inflation openly. Add
fetch_inflation + parse_inflation_xlsx (CBR UniDbQuery DownloadExcel/132934,
monthly % г/г, region=rf, source=cbr) to cbr_macro.py; upsert
indicator_type=inflation_yoy via the existing cbr_macro_sync task (per-series
guard, SAVEPOINT-per-row, CAST not ::, ON CONFLICT on the PK).

Surface inflation_yoy in MonthlyMacro (frozen, carry-forward) and ACTIVATE the
reserved §9.5 inflation channel (macro_coefficient f_inflation: level-vs-4%-target
nudge, non-positive to avoid double-counting f_rate, excluded from
_RATE_DRIVEN_FACTORS). Channel was DEGRADED (no data) -> now BACKED + consumed;
_CONF_HIGH_MIN_BACKED 4->5. Deterministic (§16/§26); renorm claims the reserved
0.08 slice as designed. Live-verified (2026-04 5.58%); 194 macro + 902 forecasting
tests green. No migration, no new deps.

Refs #946.
bot-backend merged commit 25e21c2bff into main 2026-06-08 06:41:51 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1162
No description provided.