feat(site-finder): forecast Section 6 (прогноз/сценарии/confidence) на экране анализа (#998) #1071

Merged
bot-backend merged 1 commit from feat/forecast-section-998 into main 2026-06-05 09:12:01 +00:00
Collaborator

Что

Новая Секция 6 на экране анализа (/site-finder/analysis/[cad]) — рендер §22-форсайта (future_market / scenarios / confidence) из SiteFinderReport. Зеркалит паттерн Section1-5, поллит GET /parcels/{cad}/forecast (202 pending → 200 ready) через TanStack Query.

Closes #998 (958-B3). Часть EPIC #958. Зависимости 955-A2/A4 (backend §13) — уже в main.

Содержимое

  • 6.1 Прогноз по горизонтамforecasts_by_horizon: индекс дефицита (цвет по знаку: >0 недонасыщенность=зелёный «строить», <0 затоварка=красный), месяцы предложения (MOI), прогноз спроса/предложения, ставка, фраза чувствительности к ставке.
  • 6.2 Сценарии — base/aggressive/conservative: дефицит на целевом горизонте + траектория ставки (rate_path).
  • 6.3 Уверенность — level-pill + явный список drivers (confidence.factors, DoD), advisory-дисклеймер.

Решения

  • #998 называл ForecastTab/ScenarioTab (написан 2026-06-02 под legacy tab-UI под /legacy/). Текущий UI — section-based, поэтому реализовано как Section 6, не таб. Legacy не тронут.
  • Render-only: horizon-селектор = отдельный #996.
  • Типы (types/forecast.ts) выверены против РЕАЛЬНОГО прод-отчёта (run #68); он же закоммичен фикстурой parcel-forecast.json.

Качество

  • code-reviewer: APPROVE — контракт точен (типы сверены с фикстурой), поллинг корректен (стоп на ready), семантика дефицита не инвертирована, robustness (null/empty/advisory_capped-guard) ок.
  • Полишинг по ревью: Unicode-минус «−» в числах (ui-microcopy), убрана дубль-подпись фактора. Спейсинг оставлен намеренно — совпадает с соседними Section3/5.
  • npm run build — зелёный (tsc + lint чисто, 19/19 страниц). Без новых зависимостей, без codegen (backend не менялся).

Тест-план (post-deploy)

  • Открыть /site-finder/analysis/66:41:0702048:27 → Секция 6: 4 горизонта, 3 сценария, confidence=низкая + факторы.
  • Свежий участок → pending-скелетон, затем подгрузка.
## Что Новая **Секция 6** на экране анализа (`/site-finder/analysis/[cad]`) — рендер §22-форсайта (`future_market` / `scenarios` / `confidence`) из SiteFinderReport. Зеркалит паттерн Section1-5, поллит `GET /parcels/{cad}/forecast` (202 pending → 200 ready) через TanStack Query. Closes #998 (958-B3). Часть EPIC #958. Зависимости 955-A2/A4 (backend §13) — уже в main. ## Содержимое - **6.1 Прогноз по горизонтам** — `forecasts_by_horizon`: индекс дефицита (цвет по знаку: >0 недонасыщенность=зелёный «строить», <0 затоварка=красный), месяцы предложения (MOI), прогноз спроса/предложения, ставка, фраза чувствительности к ставке. - **6.2 Сценарии** — base/aggressive/conservative: дефицит на целевом горизонте + траектория ставки (`rate_path`). - **6.3 Уверенность** — level-pill + **явный список drivers** (`confidence.factors`, DoD), advisory-дисклеймер. ## Решения - #998 называл `ForecastTab/ScenarioTab` (написан 2026-06-02 под legacy tab-UI под `/legacy/`). Текущий UI — section-based, поэтому реализовано как **Section 6**, не таб. Legacy не тронут. - Render-only: horizon-селектор = отдельный #996. - Типы (`types/forecast.ts`) выверены против РЕАЛЬНОГО прод-отчёта (run #68); он же закоммичен фикстурой `parcel-forecast.json`. ## Качество - `code-reviewer`: ✅ APPROVE — контракт точен (типы сверены с фикстурой), поллинг корректен (стоп на ready), семантика дефицита не инвертирована, robustness (null/empty/`advisory_capped`-guard) ок. - Полишинг по ревью: Unicode-минус «−» в числах (ui-microcopy), убрана дубль-подпись фактора. Спейсинг оставлен намеренно — совпадает с соседними Section3/5. - `npm run build` — зелёный (tsc + lint чисто, 19/19 страниц). Без новых зависимостей, без codegen (backend не менялся). ## Тест-план (post-deploy) - Открыть `/site-finder/analysis/66:41:0702048:27` → Секция 6: 4 горизонта, 3 сценария, confidence=низкая + факторы. - Свежий участок → pending-скелетон, затем подгрузка.
bot-backend added the
scope/frontend
GG-форсайт
site-finder
labels 2026-06-05 09:11:12 +00:00
bot-backend added 1 commit 2026-06-05 09:11:13 +00:00
feat(site-finder): forecast Section 6 (прогноз/сценарии/confidence) on analysis screen (#998)
All checks were successful
Deploy / changes (push) Successful in 6s
Deploy / build-backend (push) Has been skipped
Deploy / build-worker (push) Has been skipped
Deploy / build-frontend (push) Successful in 2m56s
Deploy / deploy (push) Successful in 1m4s
4ec762a202
Renders the §22 SiteFinderReport (future_market/scenarios/confidence) as a new
Section 6 on the modern analysis page (/site-finder/analysis/[cad]), mirroring the
Section1-5 pattern. Polls GET /parcels/{cad}/forecast (202 pending → 200 ready) via
TanStack Query. Render-only (horizon selector = separate #996).

- 6.1 прогноз по горизонтам (deficit_index, MOI, demand/supply, ставка)
- 6.2 сценарии base/aggressive/conservative + rate_path
- 6.3 уверенность: level pill + явный список drivers (confidence.factors)
- types/forecast.ts typed against real prod report; fixture parcel-forecast.json (run #68)
- reuses design tokens + Badge/KpiCard; advisory disclaimer always shown

Part of EPIC #958. Deps 955-A2/A4 (backend §13, merged).
bot-backend merged commit 4ec762a202 into main 2026-06-05 09:12:01 +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#1071
No description provided.