feat(ptica): Сценарии tab (§22 forecast) + real hero invest-score [PR#2] #1832

Merged
lekss361 merged 1 commit from feat/ptica-cockpit-pr2-scenarios into main 2026-06-20 12:33:08 +00:00
Collaborator

Стэкнут на #1831 (база ветка feat/ptica-cockpit-pr1) — диф только дельта инкремента 2.

Что

Вкладка «Сценарии» (Прогноз §22) в тёмном cockpit'е ПТИЦЫ, привязана к реальному useParcelForecastQueryForecastEnvelope.

  • 3 карточки сценариев (Базовый / Агрессивный / Консервативный): дефицит-индекс, спрос, предложение, МОП, вывод;
  • «Прогноз по горизонтам» — SVG-график спрос-vs-предложение + таблица горизонтов (6/12/18, селектор);
  • «Сравнение сценариев» — таблица;
  • «Уверенность прогноза» — факторы с high/mid/low пилюлями;
  • «Рекомендованный продукт» — квартирография + класс + целевая цена + success-score;
  • «Прозрачность скоринга» — таблица фактор/вес/направление.

Async-корректность

Прогноз асинхронный (enqueue из /analyze, polling каждые 4с до status=ready). Пока pendingспокойный скелетон «Прогноз считается…», НЕ ошибка. Все под-блоки гардят отсутствующий report/поля.

Бонус — закрыты плейсхолдеры hero

Инвест-скор (scoring.overall×10) и Buy Signal (из exec_summary.key_numbers.deficit_index: >0.05 приобретать / <−0.05 пропустить / иначе наблюдать) теперь живые, как только прогноз готов; «после прогноза» остаётся пока pending. Caption advisory · §22 в обоих состояниях. Buy-signal выводится независимо от наличия overall-скора.

Качество

Все поля forecast сверены с types/forecast.ts (никаких выдуманных путей). Тёмная тема — scoped под .pticaRoot[data-theme=dark]. TS strict, без any, tsc/lint/prettier . code-reviewer APPROVE (2 минора закрыты: advisory-caption на живом скоре + buy-signal при тонком скоринге).

Дальше

PR#3 «Отчёты + Сравнение» → PR#4 «16 drawer'ов» → PR#5 «3D-масса».

**Стэкнут на #1831** (база ветка `feat/ptica-cockpit-pr1`) — диф только дельта инкремента 2. ## Что Вкладка **«Сценарии»** (Прогноз §22) в тёмном cockpit'е ПТИЦЫ, привязана к реальному `useParcelForecastQuery` → `ForecastEnvelope`. - 3 карточки сценариев (Базовый / Агрессивный / Консервативный): дефицит-индекс, спрос, предложение, МОП, вывод; - «Прогноз по горизонтам» — SVG-график спрос-vs-предложение + таблица горизонтов (6/12/18, селектор); - «Сравнение сценариев» — таблица; - «Уверенность прогноза» — факторы с high/mid/low пилюлями; - «Рекомендованный продукт» — квартирография + класс + целевая цена + success-score; - «Прозрачность скоринга» — таблица фактор/вес/направление. ## Async-корректность Прогноз асинхронный (enqueue из `/analyze`, polling каждые 4с до `status=ready`). Пока `pending` — **спокойный скелетон «Прогноз считается…»**, НЕ ошибка. Все под-блоки гардят отсутствующий report/поля. ## Бонус — закрыты плейсхолдеры hero Инвест-скор (`scoring.overall`×10) и Buy Signal (из `exec_summary.key_numbers.deficit_index`: >0.05 приобретать / <−0.05 пропустить / иначе наблюдать) теперь **живые**, как только прогноз готов; «после прогноза» остаётся пока pending. Caption `advisory · §22` в обоих состояниях. Buy-signal выводится независимо от наличия overall-скора. ## Качество Все поля forecast сверены с `types/forecast.ts` (никаких выдуманных путей). Тёмная тема — scoped под `.pticaRoot[data-theme=dark]`. **TS strict, без `any`**, tsc/lint/prettier ✅. code-reviewer ✅ APPROVE (2 минора закрыты: advisory-caption на живом скоре + buy-signal при тонком скоринге). ## Дальше PR#3 «Отчёты + Сравнение» → PR#4 «16 drawer'ов» → PR#5 «3D-масса».
bot-backend added 1 commit 2026-06-20 10:49:27 +00:00
Dark cockpit Scenarios tab wired to useParcelForecastQuery (ForecastEnvelope):
scenario cards (base/aggr/conserv), demand-vs-supply chart + horizons table,
scenario compare table, confidence panel, recommended product (квартирография
+ target price + success-score), scoring transparency. Calm polling skeleton
while the async forecast is pending — never an error.

Hero invest-score/buy-signal now surface real values once the forecast resolves
(scoring.overall×10; buy-signal from exec_summary.key_numbers.deficit_index,
derived independent of the overall score), keeping the "после прогноза"
placeholders while pending. advisory · §22 caption shown in both states.

All forecast field paths verified against types/forecast.ts. Dark theme stays
scoped under .pticaRoot[data-theme=dark]. TS strict, no any.
lekss361 changed target branch from feat/ptica-cockpit-pr1 to main 2026-06-20 12:32:57 +00:00
lekss361 merged commit 76311cbfe8 into main 2026-06-20 12:33:08 +00:00
lekss361 deleted branch feat/ptica-cockpit-pr2-scenarios 2026-06-20 12:33:09 +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#1832
No description provided.