fix(site-finder): раскрыть proxy-fraction в EKB-median velocity-бенчмарке (#2445-A4) #2448

Merged
bot-backend merged 1 commit from fix/velocity-ekb-median-proxy-disclosure into main 2026-07-05 18:54:43 +00:00
Collaborator

Summary

Аудит-находка A4 (epic #2445). _get_ekb_median содержит COALESCE(deals_total_vol_m2, deals_total_count*45.0) — фабрикует «45 м²/сделку» для строк без реального Объектив-объёма, молча засоряя city-wide знаменатель нормализации, по которому считается velocity_score каждого участка. Без сигнала качества.

Fix (disclosure, не exclusion)

Расширен существующий SF#1871-P2 disclosure-паттерн (уже применён для rosreestr_fallback) на этот бенчмарк: _get_ekb_median возвращает (median, proxy_row_fraction), поверхностно в VelocityResult.ekb_median_proxy_fraction. Fraction и median считаются над одним CTE (та же HAVING >= 3 выборка) → disclosure честный. Аддитивное поле loose-dict ответа → openapi-codegen не требуется (verified).

Исключение (а не disclosure) выкинуло бы реально продающийся, но без-м² проект из бенчмарка целиком — другая, но столь же нечестная деформация; docstring не указывает, что real-data-only когда-либо был замыслом.

Test plan

  • 22 теста velocity зелёные (13 обновлены под tuple-return, 2 новых на оба path)
  • ruff чисто, psycopg CAST соблюдён
  • code-reviewer: APPROVE (0 блокеров)

Follow-up (вынесено, не в этом PR)

2 оставшихся COALESCE(..., *45.0) сайта (velocity.py:273/405, per-competitor total_sqm/sqm_sold) — меньший blast radius (один участок, не глобальный знаменатель). Заведу отдельным issue.

Refs #2445

## Summary Аудит-находка A4 (epic #2445). `_get_ekb_median` содержит `COALESCE(deals_total_vol_m2, deals_total_count*45.0)` — фабрикует «45 м²/сделку» для строк без реального Объектив-объёма, молча засоряя city-wide знаменатель нормализации, по которому считается `velocity_score` **каждого** участка. Без сигнала качества. ## Fix (disclosure, не exclusion) Расширен существующий SF#1871-P2 disclosure-паттерн (уже применён для rosreestr_fallback) на этот бенчмарк: `_get_ekb_median` возвращает `(median, proxy_row_fraction)`, поверхностно в `VelocityResult.ekb_median_proxy_fraction`. Fraction и median считаются над одним CTE (та же `HAVING >= 3` выборка) → disclosure честный. Аддитивное поле loose-dict ответа → **openapi-codegen не требуется** (verified). Исключение (а не disclosure) выкинуло бы реально продающийся, но без-м² проект из бенчмарка целиком — другая, но столь же нечестная деформация; docstring не указывает, что real-data-only когда-либо был замыслом. ## Test plan - [x] 22 теста velocity зелёные (13 обновлены под tuple-return, 2 новых на оба path) - [x] ruff чисто, psycopg `CAST` соблюдён - [x] code-reviewer: ✅ APPROVE (0 блокеров) ## Follow-up (вынесено, не в этом PR) 2 оставшихся `COALESCE(..., *45.0)` сайта (`velocity.py:273/405`, per-competitor `total_sqm`/`sqm_sold`) — меньший blast radius (один участок, не глобальный знаменатель). Заведу отдельным issue. Refs #2445
bot-backend added 1 commit 2026-07-05 18:36:28 +00:00
fix(site-finder): раскрыть proxy-fraction в EKB-median velocity-бенчмарке (#2445-A4)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 7s
CI Trade-In / backend-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 1m51s
CI / backend-tests (pull_request) Successful in 14m41s
6efefc814e
_get_ekb_median COALESCE(deals_total_vol_m2, deals_total_count*45.0) фабрикует
м²-объём для строк без реальных Объектив-данных, молча засоряя city-wide
знаменатель нормализации, по которому считается velocity_score КАЖДОГО участка,
без сигнала качества.

Расширяем существующий SF#1871-P2 disclosure-паттерн (уже применён для
rosreestr_fallback) на этот бенчмарк: _get_ekb_median теперь возвращает
(median, proxy_row_fraction), поверхностно в VelocityResult.ekb_median_proxy_fraction.
Fraction и median считаются над ОДНИМ CTE (та же HAVING >= 3 гейт-выборка) —
disclosure не вводит в заблуждение. Аддитивное поле loose-dict ответа →
codegen не требуется.

Refs #2445
bot-backend merged commit b40995780b into main 2026-07-05 18:54:43 +00:00
bot-backend deleted branch fix/velocity-ekb-median-proxy-disclosure 2026-07-05 18:54:43 +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#2448
No description provided.