market_now.summary: district-wide счёт ЖК-выборки (obj_count) выдаётся за «N ЖК-конкурентов рядом» #1634

Closed
opened 2026-06-16 18:44:27 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: report-honesty · Файл: backend/app/services/forecasting/report_assembler.py:396-401

Файл: backend/app/services/forecasting/report_assembler.py:396-398 (в _market_now_summary).

Код: n_comp = _analog_count(analyze, market_metrics)parts.append(f"{n_comp} ЖК-конкурентов рядом").

Почему баг: _analog_count (report_assembler.py:156-176) в нормальном пути возвращает market_metrics.obj_count. По определению MarketMetrics (backend/app/services/site_finder/market_metrics.py:95) obj_count = «сколько отдельных ЖК (project_name) попало в выборку» — это число ЖК во всей district-wide/микрорайонной выборке §9.2, а не число конкурентов в радиусе участка. Реальное локальное окружение (analyze.market_pulse.competitors_total / len(competitors)) берётся только в fallback, когда market_metrics is None. Поэтому при наличии market_metrics отчёт печатает выборочный счёт под меткой «рядом».

Импакт: ложное утверждение о локальном окружении участка в человекочитаемой строке отчёта (завышает воспринимаемую конкуренцию рядом). Численные сигналы не портятся — для analog_count #990 obj_count корректен (это и есть мера аналогов выборки). Severity low (микрокопия/вводящий текст).

Фикс: для строки market_now брать локальный счёт окружения (market_pulse.competitors_total / competitors) либо переформулировать метку под смысл obj_count, например «N ЖК в выборке района» вместо «N ЖК-конкурентов рядом». Не смешивать district-wide выборку с радиус-локальным окружением в одной фразе.

Почему баг: В нормальном пути (market_metrics присутствует) отчёт печатает district-wide число ЖК выборки §9.2 как «N ЖК-конкурентов РЯДОМ» — ложное утверждение о локальном окружении участка. Само значение для confidence-сигнала #990 (analog_count) корректно — там это и есть мера аналогов; баг локализован в человекочитаемой строке market_now.summary, которая вводит в заблуждение (завышает воспринимаемую конкуренцию рядом). Импакт — ложь в отчёте, не порча чисел.

Как чинить: Для строки market_now.summary использовать именно ЛОКАЛЬНЫХ конкурентов (analyze.competitors / market_pulse.competitors_total), а obj_count показывать с честной меткой «ЖК в выборке рынка», а не «рядом». Либо переименовать микрокопию, отделив «аналогов в выборке» от «конкурентов рядом».


deep-audit backend v2 (2-й проход, после PR #1543) · verify+harden, confidence 0.85 · unit B23

**Severity:** low · **Категория:** report-honesty · **Файл:** `backend/app/services/forecasting/report_assembler.py:396-401` Файл: backend/app/services/forecasting/report_assembler.py:396-398 (в _market_now_summary). Код: `n_comp = _analog_count(analyze, market_metrics)` → `parts.append(f"{n_comp} ЖК-конкурентов рядом")`. Почему баг: _analog_count (report_assembler.py:156-176) в нормальном пути возвращает market_metrics.obj_count. По определению MarketMetrics (backend/app/services/site_finder/market_metrics.py:95) obj_count = «сколько отдельных ЖК (project_name) попало в выборку» — это число ЖК во всей district-wide/микрорайонной выборке §9.2, а не число конкурентов в радиусе участка. Реальное локальное окружение (analyze.market_pulse.competitors_total / len(competitors)) берётся только в fallback, когда market_metrics is None. Поэтому при наличии market_metrics отчёт печатает выборочный счёт под меткой «рядом». Импакт: ложное утверждение о локальном окружении участка в человекочитаемой строке отчёта (завышает воспринимаемую конкуренцию рядом). Численные сигналы не портятся — для analog_count #990 obj_count корректен (это и есть мера аналогов выборки). Severity low (микрокопия/вводящий текст). Фикс: для строки market_now брать локальный счёт окружения (market_pulse.competitors_total / competitors) либо переформулировать метку под смысл obj_count, например «N ЖК в выборке района» вместо «N ЖК-конкурентов рядом». Не смешивать district-wide выборку с радиус-локальным окружением в одной фразе. **Почему баг:** В нормальном пути (market_metrics присутствует) отчёт печатает district-wide число ЖК выборки §9.2 как «N ЖК-конкурентов РЯДОМ» — ложное утверждение о локальном окружении участка. Само значение для confidence-сигнала #990 (analog_count) корректно — там это и есть мера аналогов; баг локализован в человекочитаемой строке market_now.summary, которая вводит в заблуждение (завышает воспринимаемую конкуренцию рядом). Импакт — ложь в отчёте, не порча чисел. **Как чинить:** Для строки market_now.summary использовать именно ЛОКАЛЬНЫХ конкурентов (analyze.competitors / market_pulse.competitors_total), а obj_count показывать с честной меткой «ЖК в выборке рынка», а не «рядом». Либо переименовать микрокопию, отделив «аналогов в выборке» от «конкурентов рядом». --- <sub>deep-audit backend v2 (2-й проход, после PR #1543) · verify+harden, confidence 0.85 · unit B23</sub>
bot-backend added the
week ревью 1
label 2026-06-16 18:44:27 +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#1634
No description provided.