gendesign/frontend/src/lib
Light1YT b1332d6b55
All checks were successful
CI / frontend-tests (pull_request) Successful in 1m3s
CI / changes (pull_request) Successful in 7s
CI / openapi-codegen-check (pull_request) Successful in 2m0s
CI / backend-tests (pull_request) Successful in 10m6s
feat(generative): calibrate finmodel sale price from Objective market data (epic #1881 PR-2)
Заменяет хардкод-цену продажи жилья (класс-норма) на реальную рыночную
медиану из Objective по локации участка. compute_financial остаётся ЧИСТЫМ
(без БД) — DB-lookup в API-слое, цена прокидывается параметром.

- compute_financial: +optional market_price_per_sqm/price_source; цена =
  рынок если есть, иначе класс-норма. Паркинг/СМР НЕ калибруем (только жильё).
- concepts.py _lookup_market_price(db, lon, lat): центроид → ближайший
  ekb_district (ST_DWithin 5км) → медиана objective_lots.price_per_m2_rub
  (n>=10, фильтр 30k-600k) → fallback ekb_districts.median_price_per_m2 →
  None. try/except → graceful (None, class_norm) при любой ошибке (вне ЕКБ/
  нет гео/SQL) без краха генерации. psycopg3 CAST.
- FinancialModel +price_per_sqm_used/price_is_calibrated/price_source (additive).
- Threading market_price через generate→placement→compute_financial (optional
  kwargs, backward-compat).
- UI/CSV: честный caption источника (рынок Objective / справочник района /
  норматив класса). Старый лживый footnote «не калиброванная модель» → условный.

Prod-verified: калибруется 4 главных ЕКБ-района по name-match (Академический
204k лотов, Ленинский 38k, Кировский, Орджоникидзевский); остальные 5 admin-
районов честно → district_reference. Гео-радиус matching (полное покрытие) —
follow-up.

api-types.ts регенерён авторитетно. mypy strict clean (generative.*), +14
тестов (калибровка/lookup 4 ветки/SQL-ошибки graceful/backward-compat).

Refs #1881
2026-06-23 21:10:25 +05:00
..
__tests__ perf(site-finder): honour AbortSignal в poll-цикле useParcelAnalyzeQuery (#1248) 2026-06-13 13:19:50 +00:00
api fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
mocks Merge pull request 'fix(site-finder): normalize POI weighted score to 0..100 on backend (#1486)' (#1674) from fix/poi-score-scale-1486 into main 2026-06-17 17:54:52 +00:00
abortableSleep.ts perf(site-finder): honour AbortSignal в poll-цикле useParcelAnalyzeQuery (#1248) 2026-06-13 13:19:50 +00:00
adminStyles.ts refactor(frontend): extract SectionLabel + EmptyState + adminStyles shared (#132) 2026-05-14 23:55:38 +03:00
analytics-api.ts feat(22k): object page — full exposure 9 blocks (sales/quartirography/metro/photos/docs/specs/checks) (#310) 2026-05-17 15:56:39 +00:00
api-types.ts feat(generative): calibrate finmodel sale price from Objective market data (epic #1881 PR-2) 2026-06-23 21:10:25 +05:00
api.ts fix(api): handle 204 No Content в apiFetch (#1219) 2026-06-13 05:13:44 +00:00
compare-shortlist.ts feat(site-finder): multi-cad сравнение (#50) + analytics поиск/cross-links (#65) 2026-06-13 17:14:15 +00:00
concept-api.ts feat(generative): calibrate finmodel sale price from Objective market data (epic #1881 PR-2) 2026-06-23 21:10:25 +05:00
download.ts fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
isPathAllowed.ts feat(rbac): frontend route-guard + nav filter (#586) 2026-05-26 06:51:45 +00:00
mock-toggle.ts feat(sf-fe-a1): routes shell — entry / analysis + _legacy/ backup + mock toggle (#340) 2026-05-17 22:01:49 +00:00
nspdLinks.ts feat(site-finder): НСПД verify deep-links + landing GenDesign vs НСПД таблица (#97 #100) 2026-06-13 15:53:02 +00:00
sessionId.ts feat(#254,#114): custom POI UI + score breakdown stacked-bar viz 2026-05-17 09:35:35 +03:00
site-finder-api.ts fix(site-finder): normalize POI weighted score to 0..100 on backend (#1486) 2026-06-17 20:26:35 +03:00
trade-in-api.ts feat(trade-in): TI-3 frontend /trade-in page + 5 components + hooks (#317) 2026-05-17 16:58:53 +00:00
useMe.ts fix(auth): отобразить роль analyst в UserMenu, расширить Role union в useMe (#1237) 2026-06-13 15:03:15 +05:00
wkt.ts feat(site-finder): add opportunity-ЗУ + red-line map layers (§12.1-13, #958) 2026-06-09 07:19:53 +00:00