(low) server.py/developer_track_record: двойной учёт лотов при N сайтах на один Objective-проект #1499

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

Severity: low · Категория: report · Файл: site-finder/server.py:846-851, 867-871

server.py:846-850 (функция developer_track_record). matched собирается по сайтам (по одному на ЖК), а total_lots/sold_lots/total_vel суммируют proj_data[o['project']][...], где proj_data ключуется по project. Если несколько сайтов застройщика замэтчены jk_objective_match на один и тот же project (06_match_economics.py матчит независимо по site_id, без ограничения уникальности project), лоты этого проекта складываются столько раз, сколько сайтов на него ссылаются. Импакт: завышенные total_lots_objective, sold_lots_objective, total_velocity_6mo, sold_pct (стр.869) в клиентском summary трек-рекорда. Чинить: дедуплицировать по project перед суммированием (например, суммировать по set(o['project'] for o in matched)) или агрегировать proj_data напрямую по уникальным проектам, а не по сайтам.

Почему баг: Стр.846 matched = по сайтам; стр.847-848 sum(proj_data[o['project']]['total']) и ['sold_n'] перебирают сайты, а proj_data ключуется по project. 06_match_economics.py (стр.73-81) вставляет по одной строке на site_id без ограничения уникальности project, поэтому N сайтов → 1 project возможно и приводит к N-кратному учёту одного набора лотов.

Как чинить: Агрегировать по уникальным проектам: projects_unique = {o['project'] for o in matched}; затем total_lots = sum(proj_data[p]['total'] for p in projects_unique) и т.д. То же для sold_lots/total_vel.


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

**Severity:** low · **Категория:** report · **Файл:** `site-finder/server.py:846-851, 867-871` server.py:846-850 (функция developer_track_record). matched собирается по сайтам (по одному на ЖК), а total_lots/sold_lots/total_vel суммируют proj_data[o['project']][...], где proj_data ключуется по project. Если несколько сайтов застройщика замэтчены jk_objective_match на один и тот же project (06_match_economics.py матчит независимо по site_id, без ограничения уникальности project), лоты этого проекта складываются столько раз, сколько сайтов на него ссылаются. Импакт: завышенные total_lots_objective, sold_lots_objective, total_velocity_6mo, sold_pct (стр.869) в клиентском summary трек-рекорда. Чинить: дедуплицировать по project перед суммированием (например, суммировать по set(o['project'] for o in matched)) или агрегировать proj_data напрямую по уникальным проектам, а не по сайтам. **Почему баг:** Стр.846 matched = по сайтам; стр.847-848 sum(proj_data[o['project']]['total']) и ['sold_n'] перебирают сайты, а proj_data ключуется по project. 06_match_economics.py (стр.73-81) вставляет по одной строке на site_id без ограничения уникальности project, поэтому N сайтов → 1 project возможно и приводит к N-кратному учёту одного набора лотов. **Как чинить:** Агрегировать по уникальным проектам: projects_unique = {o['project'] for o in matched}; затем total_lots = sum(proj_data[p]['total'] for p in projects_unique) и т.д. То же для sold_lots/total_vel. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.72 · unit U113</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:47 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:14 +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#1499
No description provided.