fix(tradein): guard ГАР-undercount знаменателя в v_building_sale_share (145) #2064

Merged
lekss361 merged 1 commit from fix/tradein-sale-share-plausible-denom into main 2026-06-28 16:05:34 +00:00
Owner

Проблема

После canon-матча (#2063) знаменатель заполнен у 2 769 домов, но ГАР недо-регистрирует помещения (лишь 68 406 из 919 341 домов региона имеют квартиры). Малый/неполный flat_count раздувал процент: топ листа был забит «5 активных из 5 квартир = 100%», а 91 дом показывал >100% (active > flats — физически невозможно).

Фикс (миграция 145, CREATE OR REPLACE VIEW)

sale_share_pct вычисляется только при правдоподобном знаменателе:

flat_count_effective >= GREATEST(COALESCE(total_floors,0), 8)   -- ≥1 кв/этаж и не мизер
AND active_secondary <= flat_count_effective                     -- не >100%

иначе NULL («н/д» — честно, без выдуманного %). Колонки/типы не меняются.

Проверено на проде (rollback-tx)

  • 2769 → 2596 достоверных домов (−91 >100%, −82 undercount), over100 = 0.
  • Топ — реальные сигналы концентрации продаж: Крауля 89А 10/11=90.9%, Ткачей 17 15/19=78.9%, Походная 63 12/32=37.5%, Шаумяна 24 6/14=42.9%.
  • coverage 38.1%; ≥5%: 425 домов, ≥10%: 103.

Test plan

  • Новый view-def прогнан на проде в ROLLBACK-tx → корректные числа выше, over100=0, ничего не персистится.
  • Авто-apply на деплое (миграция гонится _schema_migrations); затем сверю summary-endpoint coverage.

city-aware матч за пределами ЕКБ + trgm-fuzzy + кросс-сверка flat_count с этажностью на 2-й знак — future work.

## Проблема После canon-матча (#2063) знаменатель заполнен у 2 769 домов, но ГАР **недо-регистрирует помещения** (лишь 68 406 из 919 341 домов региона имеют квартиры). Малый/неполный `flat_count` раздувал процент: топ листа был забит «5 активных из 5 квартир = 100%», а **91 дом показывал >100%** (`active > flats` — физически невозможно). ## Фикс (миграция 145, `CREATE OR REPLACE VIEW`) `sale_share_pct` вычисляется только при **правдоподобном** знаменателе: ``` flat_count_effective >= GREATEST(COALESCE(total_floors,0), 8) -- ≥1 кв/этаж и не мизер AND active_secondary <= flat_count_effective -- не >100% ``` иначе `NULL` («н/д» — честно, без выдуманного %). Колонки/типы не меняются. ## Проверено на проде (rollback-tx) - **2769 → 2596** достоверных домов (−91 >100%, −82 undercount), **over100 = 0**. - Топ — реальные сигналы концентрации продаж: `Крауля 89А 10/11=90.9%`, `Ткачей 17 15/19=78.9%`, `Походная 63 12/32=37.5%`, `Шаумяна 24 6/14=42.9%`. - coverage 38.1%; ≥5%: 425 домов, ≥10%: 103. ## Test plan - [x] Новый view-def прогнан на проде в ROLLBACK-tx → корректные числа выше, over100=0, ничего не персистится. - [ ] Авто-apply на деплое (миграция гонится `_schema_migrations`); затем сверю summary-endpoint coverage. city-aware матч за пределами ЕКБ + trgm-fuzzy + кросс-сверка `flat_count` с этажностью на 2-й знак — future work.
lekss361 added 1 commit 2026-06-28 16:05:15 +00:00
fix(tradein): guard ГАР-undercount знаменателя в v_building_sale_share
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
48e2201c7b
ГАР часто недо-регистрирует помещения (лишь 68k из 919k домов имеют квартиры),
из-за чего малые знаменатели раздували % — топ листа был забит «100% = 5 из 5»
и 91 дом показывал >100% (active>flats, физически невозможно). Добавляю гейт:
sale_share_pct считается только если flat_count_effective >= GREATEST(этажность, 8)
И active_secondary <= flat_count_effective. Проверено на проде (rollback):
2769→2596 достоверных (−91 >100% −82 undercount), over100=0, топ — реальные
сигналы (Крауля 89А 10/11=90.9%, Ткачей 17 15/19=78.9%). Недостоверные → «н/д».
lekss361 merged commit 57ae2dfe00 into main 2026-06-28 16:05:34 +00:00
lekss361 deleted branch fix/tradein-sale-share-plausible-denom 2026-06-28 16:05:34 +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#2064
No description provided.