feat(forecast): in-app product_tz recommendation (subsection 6.4) (#958) #1117

Merged
bot-backend merged 1 commit from feat/forecast-product-tz-block into main 2026-06-07 09:55:55 +00:00
Collaborator

Что

В браузерный экран прогноза (Section6Forecast, /site-finder/analysis/{cad}) добавлена подсекция «6.4 Рекомендация по продукту» — рендер секции product_tz (§13.4 ТЗ): рекомендованный класс, квартирография, коммерция, УТП, обоснование (§16). Раньше эта секция существовала ТОЛЬКО в экспортах (md/docx/pptx/pdf) — т.е. главный ответ ТЗ «что строить» был не виден в приложении.

Относится к #958 (EPIC 14: UI экран прогноза/сценариев).

Содержимое

  • types/forecast.tsReportProductTz + вложенные интерфейсы (mix/commercial/usp/reasons/drivers/rejected), product_tz? опционально на ForecastReport (сверено с report.py:ReportProductTz + report_assembler.py).
  • ForecastProductTzBlock.tsx (новый) — класс-бейдж, квартирография горизонтальными token-полосами, коммерция, УТП-список, обоснование через <details>. Graceful: null если секции нет; каждое под-поле под guard; безопасно на 202-pending/partial.
  • Section6Forecast.tsx + сайдбар-нав — проводка 6.4.
  • forecast-helpers.tsdeficitBarWidthPct.

Честность визуализации (ключевой момент)

Ассемблер НЕ эмитит pct (долю по форматам) — mix это {bucket, obj_class, deficit_index} из ранжированных по дефициту сегментов. Поэтому полосы honest-labeled как сигнал дефицита по форматам (заголовок «Квартирография · по дефициту форматов» + поясняющая подпись), НЕ как доля квартир в программе — чтобы не ввести девелопера в заблуждение. Если backend позже добавит pct, компонент уже рендерит настоящие %-полосы без изменений.

Качество

  • code-reviewer: APPROVE — semantic-honesty gate пройден (полосы не выдают дефицит за build-share; «доля»/share не доходит до DOM в live-кейсе), типы сверены с backend, graceful/partial/202 безопасны, no-regression к 6.1-6.3, a11y (role=img+aria), токены, RU, no any, no deps. npm run build зелёный.

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

/site-finder/analysis/66:41:0702048:27 → Секция 6 → подсекция «6.4 Рекомендация по продукту»: виден класс, полосы квартирографии с подписью про дефицит, обоснование раскрывается.

## Что В браузерный экран прогноза (Section6Forecast, `/site-finder/analysis/{cad}`) добавлена подсекция **«6.4 Рекомендация по продукту»** — рендер секции `product_tz` (§13.4 ТЗ): рекомендованный класс, квартирография, коммерция, УТП, обоснование (§16). Раньше эта секция существовала ТОЛЬКО в экспортах (md/docx/pptx/pdf) — т.е. главный ответ ТЗ «что строить» был не виден в приложении. Относится к #958 (EPIC 14: UI экран прогноза/сценариев). ## Содержимое - `types/forecast.ts` — `ReportProductTz` + вложенные интерфейсы (mix/commercial/usp/reasons/drivers/rejected), `product_tz?` опционально на `ForecastReport` (сверено с `report.py:ReportProductTz` + `report_assembler.py`). - `ForecastProductTzBlock.tsx` (новый) — класс-бейдж, квартирография горизонтальными token-полосами, коммерция, УТП-список, обоснование через `<details>`. Graceful: `null` если секции нет; каждое под-поле под guard; безопасно на 202-pending/partial. - `Section6Forecast.tsx` + сайдбар-нав — проводка 6.4. - `forecast-helpers.ts` — `deficitBarWidthPct`. ## Честность визуализации (ключевой момент) Ассемблер НЕ эмитит `pct` (долю по форматам) — `mix` это `{bucket, obj_class, deficit_index}` из ранжированных по дефициту сегментов. Поэтому полосы honest-labeled как **сигнал дефицита по форматам** (заголовок «Квартирография · по дефициту форматов» + поясняющая подпись), НЕ как доля квартир в программе — чтобы не ввести девелопера в заблуждение. Если backend позже добавит `pct`, компонент уже рендерит настоящие %-полосы без изменений. ## Качество - `code-reviewer`: ✅ APPROVE — semantic-honesty gate пройден (полосы не выдают дефицит за build-share; «доля»/share не доходит до DOM в live-кейсе), типы сверены с backend, graceful/partial/202 безопасны, no-regression к 6.1-6.3, a11y (`role=img`+aria), токены, RU, no `any`, no deps. `npm run build` зелёный. ## Тест-план (post-deploy) `/site-finder/analysis/66:41:0702048:27` → Секция 6 → подсекция «6.4 Рекомендация по продукту»: виден класс, полосы квартирографии с подписью про дефицит, обоснование раскрывается.
bot-backend added the
scope/frontend
GG-форсайт
site-finder
labels 2026-06-07 09:55:52 +00:00
bot-backend added 1 commit 2026-06-07 09:55:52 +00:00
feat(forecast): render product_tz (ТЗ на ЖК) as in-app subsection 6.4
All checks were successful
CI / changes (push) Successful in 6s
CI / backend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 8s
CI / backend-tests (pull_request) Has been skipped
ed72e0ba1d
Adds «6.4 Рекомендация по продукту» to Section6Forecast — the §13.4
product recommendation (class, unit-mix, commercial, USP, §16 reasons)
that previously existed only in the export renderers. Unit-mix is shown
as token-colored horizontal bars; since the assembler emits no per-format
share (pct), bars are honestly labeled as a deficit-by-format signal, not
a build-share. Graceful on thin/202-pending/partial reports.

- types/forecast.ts: ReportProductTz + nested interfaces, optional on ForecastReport
- ForecastProductTzBlock.tsx: per-field guards, role=img bars, reasons disclosure
- forecast-helpers.ts: deficitBarWidthPct
- Section6Forecast + sidebar nav: wire 6.4

Part of #958.
bot-backend merged commit 54a501b90a into main 2026-06-07 09:55:55 +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#1117
No description provided.