Заменяет хардкод-цену продажи жилья (класс-норма) на реальную рыночную медиану из 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 |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| chat.py | ||
| complex_buildings.py | ||
| concept.py | ||
| custom_poi.py | ||
| insight.py | ||
| job_settings.py | ||
| location.py | ||
| market.py | ||
| nspd_bulk.py | ||
| own_project.py | ||
| parcel.py | ||
| recommend.py | ||
| trade_in.py | ||