ПТИЦА: гео-радиусная цена участка считается по лотам проектов ближних ЖК, а не по чужим лотам под устаревшим complex_id (#3583) #3591

Merged
bot-backend merged 1 commit from fix/3583-radius-price-complex into main 2026-09-17 13:32:56 +00:00

1 commit

Author SHA1 Message Date
7c52622a76 fix(parcels): гео-радиусная цена участка берёт лоты проектов ближних ЖК, а не чужие под устаревшим complex_id (#3583)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 13s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m48s
CI / backend-tests (pull_request) Successful in 7m42s
geo_radius_price отбирал лоты по objective_lots.complex_id. Эта колонка
проставлена один раз миграцией 76, а еженедельный UPSERT переписывает
project_name и не трогает complex_id, поэтому под id ближнего ЖК лежат лоты
ЖК из других районов. На проде медиана любого участка сходилась к средней по
городу: 125–138 тыс. ₽/м² при реальном разбросе 107–181 тыс.

Как в #2962: complex → проект через complex_sources (source='objective'),
лоты по project_name, имя проекта сверяется с именем ЖК. Сверка отсекает 4
неверные fuzzy-связи (VEER PARK/Clever Park, Клевер/Веер, Графит/Гранит,
Традиции/Традиция) и 2 верные («Новая Ботаника-2», «Теплые кварталы (BAZA)»).

Дедуп физлота перенесён в LATERAL по проекту с premise_kind='квартира',
чтобы работал покрывающий индекс: иначе запрос шёл 690 мс вместо 62.
Апартаменты сейчас есть только у проектов, чьи complexes без координат, так
что на медиану фильтр не влияет (570 участков, 0 отличий).

SQL вынесен в _GEO_RADIUS_PRICE_SQL, чтобы тест гонял его на временных таблицах.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 18:21:15 +05:00