gendesign/backend/tests/sql
bot-backend 1b2a26bb9a
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
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 2m27s
CI / backend-tests (pull_request) Successful in 17m13s
fix(ptica): лоты без площади — своя корзина, а не «<25 м²» (#2464)
`_SUPPLY_ONLY_LOTS_SQL` раскладывал `area_pd IS NULL` в ту же корзину
`'<25'`, что и настоящие студии. Замер прода 20.08.2026 (последний
снапшот на физлот, premise_kind='квартира', не проданные):

    в продаже            181 353
    без area_pd           11 557   (6.4 %)
    реально < 25 м²        7 013

Корзина «<25» состояла из неизвестного на 62 % и завышала долю мелких
лотов в блоке «По предложению (без темпа продаж)».

Зеркала у такого отображения не было: `layout_signature.area_bin`
принимает float и NULL-ветки не имеет вовсе, а velocity-MV по площади
не группирует — то есть `NULL → '<25'` было выдумкой, а не переносом
чужого правила.

Исключать такие лоты нельзя: они реально в продаже, и без них
предложение занизилось бы на 6.4 %. Поэтому отдельная корзина «н/д».
Медиана площади у неё выйдет NULL (PERCENTILE_CONT игнорирует NULL) —
честно. Схема не меняется: area_bin остаётся str, OpenAPI прежний.

Тест герметичный и прогоняет НАСТОЯЩИЙ SQL: временная таблица
objective_lots затеняет боевую в пределах сессии, запрос берётся из
модуля дословно, прод-данные не читаются.

Двусторонне: против origin/main корзины распределяются как
{'<25': 2, '25-40': 1, '40-60': 1} — конкретное неверное значение, ни
одного TypeError/ImportError. Контроли (сумма лотов сохраняется,
обычные корзины не меняются) зелёные с обеих сторон.

pytest backend/tests/sql/ — 38 passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 21:41:47 +05:00
..
__init__.py chore(mv): regression test + sql rule for weighted AVG (#295) (#626) 2026-05-28 13:49:54 +00:00
test_2464_area_bin_unknown.py fix(ptica): лоты без площади — своя корзина, а не «<25 м²» (#2464) 2026-08-20 21:41:47 +05:00
test_2464_default_profile_unique.py fix(ptica): у пользователя не может быть двух дефолтных профилей весов (#2464) 2026-08-20 16:58:48 +05:00
test_2464_land_reservation_dedup.py fix(ptica): land_reservation перестаёт копить дубли — 91% таблицы были копиями (#2464) (#2966) 2026-08-20 10:16:34 +00:00
test_2464_leads_stats_suffix_contract.py fix(ptica): выручка и сделки в KPI лидов названы по своему охвату (#2464) (#2963) 2026-08-20 09:44:14 +00:00
test_2956_freshness_ignores_failed_dumps.py fix(ptica): свежесть data-table источника считается по успешным строкам (#2956) (#2957) 2026-08-20 08:36:05 +00:00
test_auth_sql_migrations.py fix(tradein): гейт номеров миграций берёт эталон из git, ручной манифест удалён 2026-08-07 14:35:28 +05:00
test_ddu_price_indicator.py feat(analytics): velocity-anomaly alerts (#17) + ARN ДДУ price indicator (#99) 2026-06-13 22:04:49 +05:00
test_mv_layout_velocity_weighted_avg.py test(suite): re-align drifted tests with current code (CI-rehab 2/3) 2026-06-03 19:05:43 +05:00
test_velocity_alerts.py feat(analytics): velocity-anomaly alerts (#17) + ARN ДДУ price indicator (#99) 2026-06-13 22:04:49 +05:00