gendesign/frontend/src/components/site-finder/analysis
Light1YT adf3ec7c00
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Successful in 1m5s
CI / openapi-codegen-check (pull_request) Successful in 1m59s
CI / backend-tests (pull_request) Successful in 10m9s
fix(site-finder): velocity fallback 4500→750, coverage/proxy disclosure, market_trend staleness honesty (audit #1871 P2)
Три honesty/correctness-фикса из audit-issue #1871 (🟠 P2). Все факты
подтверждены prod-DB + разведкой. ETL не трогаем (отдельная задача).

velocity.py:
- _EKB_MEDIAN_FALLBACK 4500→750 (audit-verified медиана ЕКБ 593-766;
  4500 завышало знаменатель нормализации 7.6× → занижало velocity_score
  при DB-error fallback, latent). Консервативно 750 (верх диапазона).
- VelocityResult + as_dict() раскрывают: objective_coverage_pct,
  proxy_used, proxy_sqm_per_deal — теперь видно что объём rosreestr-пути
  фабрикуется count×45 м²/сделка при низком покрытии Objective (<50%).
  Проброшено во все 4 конструктора, additive.

parcels.py (market_trend producer):
- Различать «источник устарел» от «нет сделок». rosreestr_deals
  MAX(period_start_date)=2026-01-01 (stale 5.5 мес) → recent-окно пусто →
  раньше голый null. Теперь status ∈ {ok, source_stale, no_deals} +
  as_of_date + label + recent_deals_count. MAX(deal_date) добавлен в CTE.
  Consumer scoring читает recent_deals_count защищённо (без регрессии).

frontend (types + MarketTrendBlock + VelocityBlock + ptica market-drawer
+ Section3 verdict + legacy guard):
- staleness/no_deals → честный caveat вместо фейкового тренда.
- velocity → caption «объём оценочный (прокси N м²/сделка, покрытие P%)».
- formatAsOfMonth парсит YYYY-MM напрямую (TZ-safe).
- Типы MarketTrend/Velocity расширены (optional, backward-compat;
  отсутствие status = "ok").

Тесты: +3 velocity unit + extended as_dict contract. 17 velocity passed,
138 frontend vitest passed.

Refs #1871
2026-06-23 12:04:08 +05:00
..
__tests__ test(site-finder): wrap MiniMap test render in QueryClientProvider (#1736) 2026-06-18 10:03:48 +03:00
AnalysisBreadcrumb.tsx feat(sf-fe-a4): AnalysisSidebar (scrollspy) + Breadcrumb + UserAvatar 2026-05-18 01:12:18 +03:00
AnalysisSidebar.tsx fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
EgrnPropertyTable.tsx fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
ExportButtons.tsx fix(site-finder): adapt backend egrn_block → frontend ParcelEgrn (#1217) 2026-06-13 05:36:52 +00:00
forecast-helpers.ts feat(site-finder): продуктовые решения по фидбеку analyze (#1741 #1742 #1743 #1744 #1745) 2026-06-18 12:18:04 +05:00
ForecastAssortmentBlock.tsx feat(site-finder): продуктовые решения по фидбеку analyze (#1741 #1742 #1743 #1744 #1745) 2026-06-18 12:18:04 +05:00
ForecastChart.tsx fix(forecasting): honest scenarios collapse when β rate-sensitivity gate fails (audit #1871 P1) 2026-06-22 19:06:22 +05:00
ForecastConfidenceBlock.tsx fix(site-finder): 5 дефектов из боевого фидбека analyze (#1736 #1737 #1738 #1739 #1740) 2026-06-18 11:47:21 +05:00
ForecastExportButtons.tsx feat(forecast): expose DOCX & PPTX export buttons in forecast UI 2026-06-07 15:12:52 +05:00
ForecastFutureSupplyBlock.tsx feat(sf): 6.6 in-app future-supply pressure + pipeline competitors (§13.3) 2026-06-07 10:55:59 +00:00
ForecastHorizonsBlock.tsx feat(site-finder): продуктовые решения по фидбеку analyze (#1741 #1742 #1743 #1744 #1745) 2026-06-18 12:18:04 +05:00
ForecastMetaLine.tsx feat(forecast): show compute date / horizons / schema in Section 6 footer 2026-06-07 16:08:31 +05:00
ForecastProductTzBlock.tsx feat(site-finder): продуктовые решения по фидбеку analyze (#1741 #1742 #1743 #1744 #1745) 2026-06-18 12:18:04 +05:00
ForecastScoringBlock.tsx feat(forecast): render scoring transparency (§13.6) as in-app subsection 6.5 2026-06-07 10:08:28 +00:00
MiniMap.tsx fix(site-finder): 5 дефектов из боевого фидбека analyze (#1736 #1737 #1738 #1739 #1740) 2026-06-18 11:47:21 +05:00
NspdVerifyLink.tsx feat(site-finder): НСПД verify deep-links + landing GenDesign vs НСПД таблица (#97 #100) 2026-06-13 15:53:02 +00:00
PoiList2Gis.tsx fix(site-finder): correct POI-score mock shape+values, routing empty assert (#1486 review) 2026-06-17 20:47:01 +03:00
ScenariosBlock.tsx fix(forecasting): honest scenarios collapse when β rate-sensitivity gate fails (audit #1871 P1) 2026-06-22 19:06:22 +05:00
Section1ParcelInfo.tsx fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
Section2NetworksUtilities.tsx Merge pull request 'feat(site-finder): карта точек подключения (НСПД) в секции «Сети» (#1746 part)' (#1751) from fix/1746-networks-section-map into main 2026-06-18 08:44:16 +00:00
Section3SettingsAndCompetitors.tsx fix(site-finder): velocity fallback 4500→750, coverage/proxy disclosure, market_trend staleness honesty (audit #1871 P2) 2026-06-23 12:04:08 +05:00
Section4Estimate.tsx fix(site-finder): перенумеровать под-подписи Section3 4.1/4.2/4.3 под новый порядок + doc-хедеры (#1741 хвост) 2026-06-18 12:38:54 +05:00
Section5Atmosphere.tsx feat(sf-fe-a11): Section 5 «Атмосфера / воздух» (#361) 2026-05-18 04:07:48 +00:00
Section6Forecast.tsx fix(forecasting): honest scenarios collapse when β rate-sensitivity gate fails (audit #1871 P1) 2026-06-22 19:06:22 +05:00
UserAvatar.tsx feat(sf-fe-a4): AnalysisSidebar (scrollspy) + Breadcrumb + UserAvatar 2026-05-18 01:12:18 +03:00