feat(forecast): расширить горизонт прогноза до 24 мес (ТЗ §12.1, Q1) #1306

Merged
bot-backend merged 1 commit from feat/horizon-24-months into main 2026-06-13 12:38:17 +00:00
Collaborator

Summary

Расширяет горизонт Site Finder 6/12/18 → 6/12/18/24 (Q1 из #944, ТЗ §12.1).

API отвергал ?horizon=24 (422), хотя движок УЖЕ считает 24 на каждом ране: _DEFAULT_HORIZONS=(6,12,18,24) во всех 6 точках стека, PIPELINE_HORIZON_MONTHS=24. _hidden_release_fraction клампит h/18→1.0 (без переполнения), future_supply._horizon_weight расширяет окно чисто — скрытых ≤18 потолков нет (backend-engineer проверил весь forecast-путь). Чистое расширение валидатора-enum, не новая математика.

Backend

  • _ALLOWED_FORECAST_HORIZONS → {6,12,18,24}, Query/docstring/error-msg auto-derive.
  • Exporters (PDF/MD/PPTX/DOCX) рендерят meta.horizons → автоматически «6,12,18,24».

Frontend

  • HorizonSelector HORIZONS=[6,12,18,24]. Тип horizon=number (union не нужен). Прочие потребители data-driven (meta.horizons/forecasts_by_horizon). Layout 4 кнопки ок.

Test plan

  • backend 141 passed (incl. движок-тесты: h=24 осмыслен — demand(24)>demand(18), hidden созрел, индексы в диапазонах; отвергает 30)
  • frontend tsc+lint clean, HorizonSelector test 4 passed
  • code-reviewer APPROVE (нет скрытых {6,12,18} хардкодов, движок считает 24 осмысленно)
  • post-deploy: ?horizon=24 → 200, §22-отчёт с горизонтом 24

Closes #944 (Q1 горизонт 24 — последний пункт MVP; см. резюме в issue)

## Summary Расширяет горизонт Site Finder 6/12/18 → **6/12/18/24** (Q1 из #944, ТЗ §12.1). API отвергал `?horizon=24` (422), хотя движок **УЖЕ считает 24** на каждом ране: `_DEFAULT_HORIZONS=(6,12,18,24)` во всех 6 точках стека, `PIPELINE_HORIZON_MONTHS=24`. `_hidden_release_fraction` клампит h/18→1.0 (без переполнения), `future_supply._horizon_weight` расширяет окно чисто — скрытых ≤18 потолков нет (backend-engineer проверил весь forecast-путь). **Чистое расширение валидатора-enum, не новая математика.** ### Backend - `_ALLOWED_FORECAST_HORIZONS` → {6,12,18,24}, Query/docstring/error-msg auto-derive. - Exporters (PDF/MD/PPTX/DOCX) рендерят `meta.horizons` → автоматически «6,12,18,24». ### Frontend - `HorizonSelector` HORIZONS=[6,12,18,24]. Тип horizon=number (union не нужен). Прочие потребители data-driven (meta.horizons/forecasts_by_horizon). Layout 4 кнопки ок. ## Test plan - [x] backend 141 passed (incl. движок-тесты: h=24 осмыслен — demand(24)>demand(18), hidden созрел, индексы в диапазонах; отвергает 30) - [x] frontend tsc+lint clean, HorizonSelector test 4 passed - [x] code-reviewer ✅ APPROVE (нет скрытых {6,12,18} хардкодов, движок считает 24 осмысленно) - [ ] post-deploy: ?horizon=24 → 200, §22-отчёт с горизонтом 24 Closes #944 (Q1 горизонт 24 — последний пункт MVP; см. резюме в issue)
bot-backend added 1 commit 2026-06-13 12:30:23 +00:00
feat(forecast): расширить горизонт прогноза до 24 мес (ТЗ §12.1)
All checks were successful
CI / changes (push) Successful in 6s
CI / frontend-tests (push) Successful in 46s
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Successful in 46s
CI / backend-tests (push) Successful in 6m35s
CI / backend-tests (pull_request) Successful in 6m30s
Deploy / changes (push) Successful in 5s
Deploy / build-backend (push) Successful in 2m14s
Deploy / build-frontend (push) Successful in 2m55s
Deploy / build-worker (push) Successful in 4m6s
Deploy / deploy (push) Successful in 1m40s
99c9a130bc
API отвергал ?horizon=24 (422), хотя ТЗ §12.1 называет 6/12/18/24, а движок
УЖЕ считает 24 на каждом ране: _DEFAULT_HORIZONS=(6,12,18,24) во всех 6 точках
стека (orchestrator/forecast-task/demand_supply_forecast/scenarios/
special_indices/report_assembler), PIPELINE_HORIZON_MONTHS=24.
_hidden_release_fraction клампит h/18→1.0 на 24 (без переполнения),
future_supply._horizon_weight расширяет окно чисто — скрытых ≤18 потолков нет.
Чистое расширение валидатора-enum, не новая математика.

Backend: _ALLOWED_FORECAST_HORIZONS → {6,12,18,24}, Query/docstring/error-msg.
Frontend: HorizonSelector HORIZONS=[6,12,18,24] (тип horizon=number, union не нужен;
прочие потребители data-driven через meta.horizons/forecasts_by_horizon).
Тесты: API принимает 24/отвергает 30; движок-тесты доказывают h=24 осмыслен
(поля посчитаны, demand(24)>demand(18), hidden созрел, индексы в диапазонах).

Closes #944 (Q1 горизонт 24)
bot-backend merged commit 99c9a130bc into main 2026-06-13 12:38:17 +00:00
bot-backend deleted branch feat/horizon-24-months 2026-06-13 12:38:17 +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#1306
No description provided.