[site-finder] EPIC 14: UI: горизонт-селектор, экран прогноза/сценариев, слои карты, confidence #958

Closed
opened 2026-06-02 16:32:18 +00:00 by Light1YT · 4 comments
Owner

Часть #944 (Site Finder v2 / ТЗ ГенГеныч).

Статус: EXTEND · Приоритет: P1 · ТЗ §12.1-12.3, 13

Scope

Горизонт-селектор (6/12/18/24) на входе+/analyze; новые блоки анализа (прогноз, будущий склад, граддок, сценарии, скоринг, индексы, уверенность); слои карты (будущие ЖК/граддок/скрытый склад/зоны риска §12.1-12.3, §13). Backend /analyze должен принять horizon (сейчас только POI-веса).

Зависимости: EPIC8-11, EPIC17
Уже есть (EXTEND): app/site-finder/**

**Часть #944 (Site Finder v2 / ТЗ ГенГеныч).** Статус: **EXTEND** · Приоритет: **P1** · ТЗ §12.1-12.3, 13 ## Scope Горизонт-селектор (6/12/18/24) на входе+/analyze; новые блоки анализа (прогноз, будущий склад, граддок, сценарии, скоринг, индексы, уверенность); слои карты (будущие ЖК/граддок/скрытый склад/зоны риска §12.1-12.3, §13). Backend /analyze должен принять horizon (сейчас только POI-веса). **Зависимости:** EPIC8-11, EPIC17 **Уже есть (EXTEND):** app/site-finder/**
Light1YT added the
GG-форсайт
site-finder
labels 2026-06-02 16:32:18 +00:00
lekss361 added this to the Site Finder v2 — Foresight (GG-форсайт) milestone 2026-06-02 19:03:03 +00:00
Collaborator

Статус UI-эпика (2026-06-06) — функционально доставлен, в проде:

  • B1 #996 horizon-селектор 6/12/18 — merged + live
  • B2 #995 /analyze принимает horizon — done (закрыт)
  • B3 #998 экран прогноза/сценариев/confidence (Секция 6) — merged + live
  • B5 #1001 починка входа (202 on-demand + error boundaries, демо-блокер) — merged + live + verified
  • B4 #999 слои карты — Step 1 (backend coords #1074) сделан+в проде; Step 2 (фронт-слои) отложен (модерн-карта = мини-карта в Секции 1; future-ЖК блокирован 950-E5). Единственный остаток эпика.

Эпик оставлен open только из-за отложенного #999.

**Статус UI-эпика (2026-06-06) — функционально доставлен, в проде:** - ✅ **B1 #996** horizon-селектор 6/12/18 — merged + live - ✅ **B2 #995** `/analyze` принимает horizon — done (закрыт) - ✅ **B3 #998** экран прогноза/сценариев/confidence (Секция 6) — merged + live - ✅ **B5 #1001** починка входа (202 on-demand + error boundaries, демо-блокер) — merged + live + verified - ⏸ **B4 #999** слои карты — Step 1 (backend coords #1074) сделан+в проде; Step 2 (фронт-слои) отложен (модерн-карта = мини-карта в Секции 1; future-ЖК блокирован 950-E5). Единственный остаток эпика. Эпик оставлен open только из-за отложенного #999.
Collaborator

Прогресс UI-форсайта (внутрисессионный, scope/frontend)

Экран прогноза (Section 6, /site-finder/analysis/{cad}) доведён до feature-complete по рендеру секций отчёта + мульти-экспорт:

  • #1113 (#999) — слои рыночной карты (конкуренты/pipeline/зоны риска) на мини-карте.
  • PR #1117 — подсекция 6.4 «Рекомендация по продукту» (product_tz §13.4: класс, квартирография, коммерция, УТП, обоснование §16). Раньше была только в экспортах.
  • PR #1120 — подсекция 6.5 «Прозрачность скоринга» (scoring §13.6: 10 продуктовых скоров + 6 спец-индексов; пороги цвета привязаны к задокументированному балансу 0.5; спец-индексы — нейтральный акцент т.к. валентность не однородна; null → «нет данных», не 0-полоса).
  • PR #1121 — кнопки экспорта .docx / .pptx (бэкенд их уже рендерил, не были доступны из UI).

Итог Section 6: exec_summary + 6.1 future_market + 6.2 scenarios + 6.3 confidence + 6.4 product_tz + 6.5 scoring + advisory; 5 форматов экспорта.

Остаётся в #958:

  • market_now намеренно НЕ дублируется в Section 6 (уже есть в Секциях 3-5: Конкуренты/Оценка/Атмосфера).
  • Горизонт 24 мес — фронт ограничен 6/12/18 т.к. backend _ALLOWED_FORECAST_HORIZONS={6,12,18} (нужна backend-работа).
  • future_competitors/future_supply — табличный детальный вид (карта-слой уже есть в #999).

Verify: code-reviewer на все 4; npm run build зелёный; деплой подтверждён (prod HEAD содержит все merge'и, frontend-образ свежий, контейнеры healthy); API run #68 посчитан, все 5 экспортов отдают 200 + корректный Content-Type (docx 41 КБ / pptx 34 КБ). In-app визуальная QA заблокирована: QA-аккаунт admintest проходит Caddy basic_auth, но НЕ привязан к app-роли → SPA показывает «Доступа нет» (провижининг QA-аккаунта, не дефект кода).

### Прогресс UI-форсайта (внутрисессионный, scope/frontend) Экран прогноза (Section 6, `/site-finder/analysis/{cad}`) доведён до feature-complete по рендеру секций отчёта + мульти-экспорт: - **#1113 (#999)** — слои рыночной карты (конкуренты/pipeline/зоны риска) на мини-карте. - **PR #1117** — подсекция **6.4 «Рекомендация по продукту»** (`product_tz` §13.4: класс, квартирография, коммерция, УТП, обоснование §16). Раньше была только в экспортах. - **PR #1120** — подсекция **6.5 «Прозрачность скоринга»** (`scoring` §13.6: 10 продуктовых скоров + 6 спец-индексов; пороги цвета привязаны к задокументированному балансу 0.5; спец-индексы — нейтральный акцент т.к. валентность не однородна; `null` → «нет данных», не 0-полоса). - **PR #1121** — кнопки экспорта **.docx / .pptx** (бэкенд их уже рендерил, не были доступны из UI). Итог Section 6: exec_summary + 6.1 future_market + 6.2 scenarios + 6.3 confidence + **6.4 product_tz** + **6.5 scoring** + advisory; 5 форматов экспорта. **Остаётся в #958:** - `market_now` намеренно НЕ дублируется в Section 6 (уже есть в Секциях 3-5: Конкуренты/Оценка/Атмосфера). - Горизонт **24 мес** — фронт ограничен 6/12/18 т.к. backend `_ALLOWED_FORECAST_HORIZONS={6,12,18}` (нужна backend-работа). - future_competitors/future_supply — табличный детальный вид (карта-слой уже есть в #999). **Verify:** code-reviewer ✅ на все 4; `npm run build` зелёный; деплой подтверждён (prod HEAD содержит все merge'и, frontend-образ свежий, контейнеры healthy); API run #68 посчитан, все 5 экспортов отдают 200 + корректный Content-Type (docx 41 КБ / pptx 34 КБ). In-app визуальная QA заблокирована: QA-аккаунт `admintest` проходит Caddy basic_auth, но НЕ привязан к app-роли → SPA показывает «Доступа нет» (провижининг QA-аккаунта, не дефект кода).
Collaborator

Апдейт прогресса — форсайт-UI feature-complete

Доставлены ещё 2 подсекции поверх ранее отмеченных #1113/#1117/#1120/#1121:

  • PR #11256.6 «Будущее предложение и конкуренты» (future_market.future_supply давление + future_competitors pipeline по релевантности). Панель давления честно гейтится по вычисленным метрикам (не по open/hidden стокам) → пока supply_layers пуст (до Monday-воркера) панель скрыта, а не показывает ложные «0 ед.».
  • PR #1128мета-подвал Section 6: «Прогноз рассчитан: <дата> · горизонты N/M мес · схема X». Дата из created_at конверта рана (всегда есть), а не из часто-null meta.generated_at.

Section 6 итог: exec_summary + 6.1 future_market + 6.2 scenarios + 6.3 confidence + 6.4 product_tz + 6.5 scoring + 6.6 future-supply/competitors + мета-свежесть + advisory; 5 форматов экспорта (.md/.json/tg/.docx/.pptx); слои карты. Каждая секция отчёта, ранее only-in-export, теперь видна в браузере.

Граница frontend-lane: не-коллизирующей GG-форсайт frontend-работы по #958 не осталось. Остаток UI: горизонт 24 мес (нужен backend _ALLOWED_FORECAST_HORIZONS + валидность экстраполяции на 24м, ref Q1 глубины истории в #944) и слой будущих ЖК (#999, ждёт newbuilding_listings API). Оба — backend (parcels.py/scrapers), вне frontend-lane.

### Апдейт прогресса — форсайт-UI feature-complete Доставлены ещё 2 подсекции поверх ранее отмеченных #1113/#1117/#1120/#1121: - **PR #1125** — **6.6 «Будущее предложение и конкуренты»** (`future_market.future_supply` давление + `future_competitors` pipeline по релевантности). Панель давления честно гейтится по вычисленным метрикам (не по open/hidden стокам) → пока `supply_layers` пуст (до Monday-воркера) панель скрыта, а не показывает ложные «0 ед.». - **PR #1128** — **мета-подвал** Section 6: «Прогноз рассчитан: <дата> · горизонты N/M мес · схема X». Дата из `created_at` конверта рана (всегда есть), а не из часто-null `meta.generated_at`. **Section 6 итог:** exec_summary + 6.1 future_market + 6.2 scenarios + 6.3 confidence + 6.4 product_tz + 6.5 scoring + 6.6 future-supply/competitors + мета-свежесть + advisory; 5 форматов экспорта (.md/.json/tg/.docx/.pptx); слои карты. Каждая секция отчёта, ранее only-in-export, теперь видна в браузере. **Граница frontend-lane:** не-коллизирующей GG-форсайт frontend-работы по #958 не осталось. Остаток UI: горизонт **24 мес** (нужен backend `_ALLOWED_FORECAST_HORIZONS` + валидность экстраполяции на 24м, ref Q1 глубины истории в #944) и слой **будущих ЖК** (#999, ждёт `newbuilding_listings` API). Оба — backend (`parcels.py`/scrapers), вне frontend-lane.
Collaborator

EPIC 14 (UI: горизонт-селектор + блоки прогноза/сценариев + слои карты + confidence) реализован и верифицирован в проде (qa-tester, 2026-06-13):

  • HorizonSelector.tsx (HORIZONS=[6,12,18], default 12) драйвит analyze+forecast.
  • Backend analyze принимает horizon, live ?horizon=6 и ?horizon=12 → 200 с per-horizon forecast.
  • Блоки: Section6Forecast, ChatPanel, SiteMap+MarketLayers (см. #999).
  • §22-секции в analysis_runs (см. #961).

Известное расхождение с ТЗ (Q1): _ALLOWED_FORECAST_HORIZONS={6,12,18} — 24-мес НЕ входит (live ?horizon=24 → 422). ТЗ §12.1 называет 6/12/18/24. Это сознательный enum, не баг. Расширение до 24 — отдельный мелкий follow-up (enum + HorizonSelector + проверка что движок demand_supply_forecast считает на 24 мес).

Core фича работает. Закрываю; 24-мес горизонт — при необходимости отдельной задачей.

EPIC 14 (UI: горизонт-селектор + блоки прогноза/сценариев + слои карты + confidence) реализован и **верифицирован в проде** (qa-tester, 2026-06-13): - `HorizonSelector.tsx` (HORIZONS=[6,12,18], default 12) драйвит analyze+forecast. - Backend analyze принимает `horizon`, live `?horizon=6` и `?horizon=12` → 200 с per-horizon forecast. - Блоки: Section6Forecast, ChatPanel, SiteMap+MarketLayers (см. #999). - §22-секции в analysis_runs (см. #961). **Известное расхождение с ТЗ (Q1):** `_ALLOWED_FORECAST_HORIZONS={6,12,18}` — 24-мес НЕ входит (live `?horizon=24` → 422). ТЗ §12.1 называет 6/12/18/24. Это сознательный enum, не баг. Расширение до 24 — отдельный мелкий follow-up (enum + HorizonSelector + проверка что движок demand_supply_forecast считает на 24 мес). Core фича работает. Закрываю; 24-мес горизонт — при необходимости отдельной задачей.
Sign in to join this conversation.
No project
No assignees
2 participants
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#958
No description provided.