(low) 06_match_economics.py/main: months_to_sellout смешивает сток разных месяцев окна со sold за всё окно #1512

Closed
opened 2026-06-15 05:59:00 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: logic · Файл: site-finder/06_match_economics.py:93-104

06_match_economics.py:93-104,145 — latest_stock берёт сток каждого корпуса на ЕГО последний месяц В ОКНЕ last3 (ROW_NUMBER ... ORDER BY month DESC, rn=1). stock_m2 района (строка 139) суммирует эти стоки, а sold_volume (sv) — за всё окно (строка 137), и mts = stock_m2/(sv/3.0) (строка 145). Корпус, выпавший из продаж в начале окна, вносит устаревший сток как «текущий», а активный корпус — свежий: знаменатель и числитель относятся к разным периодам внутри окна. Импакт: months_to_sellout района (corp_sum, показывается в логе 06:154 и в блоке отчёта 04:164) неоднороден. Смягчение: метрика corp_sum второстепенна (real_* предпочтительнее). Фикс: брать сток на единый срез (последний месяц окна для всех) либо нормировать сток и продажи на один период.

Почему баг: ROW_NUMBER берёт rn=1 = самый поздний месяц В ОКНЕ для каждого корпуса, но это не обязательно последний доступный месяц данных вообще; для корпусов, выпавших из продаж, сток фиксируется на их последнем месяце в окне и суммируется как актуальный. Метрика to_sellout (показывается в логе и в corp_sum-блоке отчёта) получается неоднородной.

Как чинить: Брать сток строго на максимальный общий месяц окна (одну дату среза) для всех корпусов, либо явно фильтровать корпуса, присутствующие в последнем месяце.


deep-audit «армия ботов 2» · verify+harden, confidence 0.7 · unit U114

**Severity:** low · **Категория:** logic · **Файл:** `site-finder/06_match_economics.py:93-104` 06_match_economics.py:93-104,145 — latest_stock берёт сток каждого корпуса на ЕГО последний месяц В ОКНЕ last3 (ROW_NUMBER ... ORDER BY month DESC, rn=1). stock_m2 района (строка 139) суммирует эти стоки, а sold_volume (sv) — за всё окно (строка 137), и mts = stock_m2/(sv/3.0) (строка 145). Корпус, выпавший из продаж в начале окна, вносит устаревший сток как «текущий», а активный корпус — свежий: знаменатель и числитель относятся к разным периодам внутри окна. Импакт: months_to_sellout района (corp_sum, показывается в логе 06:154 и в блоке отчёта 04:164) неоднороден. Смягчение: метрика corp_sum второстепенна (real_* предпочтительнее). Фикс: брать сток на единый срез (последний месяц окна для всех) либо нормировать сток и продажи на один период. **Почему баг:** ROW_NUMBER берёт rn=1 = самый поздний месяц В ОКНЕ для каждого корпуса, но это не обязательно последний доступный месяц данных вообще; для корпусов, выпавших из продаж, сток фиксируется на их последнем месяце в окне и суммируется как актуальный. Метрика to_sellout (показывается в логе и в corp_sum-блоке отчёта) получается неоднородной. **Как чинить:** Брать сток строго на максимальный общий месяц окна (одну дату среза) для всех корпусов, либо явно фильтровать корпуса, присутствующие в последнем месяце. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.7 · unit U114</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:59:00 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:16 +00:00
bot-backend added the
needs-human
label 2026-06-15 16:44:12 +00:00
Sign in to join this conversation.
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#1512
No description provided.