fix(site-finder): L2 hidden-supply не обнуляет неизвестный flat_count (#2445-A3) #2446

Merged
bot-backend merged 1 commit from fix/supply-layers-l2-flat-count-null into main 2026-07-05 18:54:15 +00:00
Collaborator

Summary

Аудит-находка A3 (epic #2445). L2-агрегат compute_layer2_hidden в supply_layers.py молча коалесил flat_count NULL → 0, из-за чего GREATEST(0, COALESCE(flat_count,0) - free_flats) = 0 для объектов с реально неизвестным числом заявленных единиц — и всё равно считал их в знаменателе покрытия n_with_free_flats. Итог: инфлейт покрытия + ложные «0 скрытых» вместо честного «неизвестно». Собственный Python-хелпер _hidden_units() уже возвращал None в этом случае — SQL ему противоречил.

Fix

Гейт обоих агрегатов (n_with_free_flats COUNT + hidden_units SUM) на free_flats IS NOT NULL AND flat_count IS NOT NULL. Знаменатель n_objects_total не тронут → покрытие честно падает, districts с частично-backfilled flat_count уходят в confidence='low'. Выравнено с sibling-конвенцией 60_/64_v_zk_rosreestr_velocity.sql.

Test plan

  • 536 тестов site_finder зелёные (51 pre-existing + 2 новых в TestLayer2Hidden)
  • ruff чисто, psycopg CAST конвенция соблюдена
  • code-reviewer: APPROVE (0 блокеров)

Post-deploy verify

Проверить, что L2 coverage/confidence для частично-backfilled района сдвинулся medium→low (deploy success ≠ применилось).

Refs #2445

## Summary Аудит-находка A3 (epic #2445). L2-агрегат `compute_layer2_hidden` в `supply_layers.py` молча коалесил `flat_count NULL → 0`, из-за чего `GREATEST(0, COALESCE(flat_count,0) - free_flats)` = 0 для объектов с реально **неизвестным** числом заявленных единиц — и всё равно считал их в знаменателе покрытия `n_with_free_flats`. Итог: инфлейт покрытия + ложные «0 скрытых» вместо честного «неизвестно». Собственный Python-хелпер `_hidden_units()` уже возвращал None в этом случае — SQL ему противоречил. ## Fix Гейт обоих агрегатов (`n_with_free_flats` COUNT + `hidden_units` SUM) на `free_flats IS NOT NULL AND flat_count IS NOT NULL`. Знаменатель `n_objects_total` не тронут → покрытие честно падает, districts с частично-backfilled `flat_count` уходят в `confidence='low'`. Выравнено с sibling-конвенцией `60_/64_v_zk_rosreestr_velocity.sql`. ## Test plan - [x] 536 тестов site_finder зелёные (51 pre-existing + 2 новых в `TestLayer2Hidden`) - [x] ruff чисто, psycopg `CAST` конвенция соблюдена - [x] code-reviewer: ✅ APPROVE (0 блокеров) ## Post-deploy verify Проверить, что L2 coverage/confidence для частично-backfilled района сдвинулся medium→low (deploy success ≠ применилось). Refs #2445
bot-backend added 1 commit 2026-07-05 18:30:22 +00:00
fix(site-finder): исключить flat_count-NULL объекты из L2 hidden-supply SQL (#2445-A3)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 7s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m0s
CI / backend-tests (pull_request) Successful in 14m46s
894ebe9946
L2-агрегат молча коалесил flat_count NULL в 0 → GREATEST(0, -free_flats)=0
для объектов с реально НЕИЗВЕСТНЫМ числом заявленных единиц, при этом всё
равно считая их в знаменателе покрытия n_with_free_flats. Результат:
инфлейт покрытия + ложные «0 скрытых» вместо «неизвестно».

Гейтим оба (n_with_free_flats COUNT и hidden_units SUM) на
flat_count IS NOT NULL AND free_flats IS NOT NULL — как уже делает
Python-хелпер _hidden_units() и sibling-запросы 60_/64_v_zk_rosreestr_velocity.sql.
Знаменатель n_objects_total не тронут → покрытие честно падает.

Refs #2445
bot-backend merged commit 9b6aba42dc into main 2026-07-05 18:54:15 +00:00
bot-backend deleted branch fix/supply-layers-l2-flat-count-null 2026-07-05 18:54:16 +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#2446
No description provided.