fix(competitors): _ACTIVE_STATUSES = русские значения как у домрф (#1213) #1257

Merged
bot-backend merged 1 commit from fix/competitors-active-statuses-ru-values into main 2026-06-13 05:53:17 +00:00
Collaborator

Summary

Closes #1213 (P2 correctness, prod). _ACTIVE_STATUSES = frozenset({"sales", "construction"}) (английский) никогда не совпадал с реальными русскими значениями domrf_kn_objects.site_status.

Bug

Scraper берёт siteStatus сырым из дом.рф (domrf_kn.py:316) — без перевода. Реальные prod-значения: «Строящиеся»/«Сданные».

Прод-аудит:

  • data/sql/105_add_sales_started_flag.sql фильтрует по 'Строящиеся' (~1322 строки).
  • partial index в 66_indexes_recommend.sql использует те же.
  • analytics_queries.py, MarketTab.tsx, CompetitorTable.tsx — все на русских.

Эффект: у ВСЕХ Competitor в POST /parcels/{cad}/competitors is_active=False и CompetitorsSummary.active_count=0 при любых данных. Типизированный контракт систематически врал. Английские значения были только в самом frozenset и в моках двух unit-тестов — тесты кодировали баг.

Fix

  • _ACTIVE_STATUSES = frozenset({"Строящиеся"}).
  • Два unit-теста (test_competitors_summary_calc, test_competitors_is_active_flag) обновлены: "sales"/"construction""Строящиеся" для активных, "completed""Сданные" для неактивных. Логика тестов не изменена.

Test plan

  • pytest tests/ -k competitors51 passed, 3 skipped.
  • ruff check → clean.
  • Post-deploy: smoke POST /competitorsactive_count > 0 при наличии данных.

Closes #1213

## Summary Closes #1213 (P2 correctness, prod). `_ACTIVE_STATUSES = frozenset({"sales", "construction"})` (английский) никогда не совпадал с реальными русскими значениями `domrf_kn_objects.site_status`. ## Bug Scraper берёт `siteStatus` сырым из дом.рф (`domrf_kn.py:316`) — без перевода. Реальные prod-значения: «Строящиеся»/«Сданные». Прод-аудит: - `data/sql/105_add_sales_started_flag.sql` фильтрует по `'Строящиеся'` (~1322 строки). - `partial index` в `66_indexes_recommend.sql` использует те же. - `analytics_queries.py`, `MarketTab.tsx`, `CompetitorTable.tsx` — все на русских. Эффект: у **ВСЕХ** `Competitor` в `POST /parcels/{cad}/competitors` `is_active=False` и `CompetitorsSummary.active_count=0` при любых данных. Типизированный контракт систематически врал. Английские значения были только в самом `frozenset` **и в моках двух unit-тестов** — тесты кодировали баг. ## Fix - `_ACTIVE_STATUSES = frozenset({"Строящиеся"})`. - Два unit-теста (`test_competitors_summary_calc`, `test_competitors_is_active_flag`) обновлены: `"sales"`/`"construction"` → `"Строящиеся"` для активных, `"completed"` → `"Сданные"` для неактивных. Логика тестов не изменена. ## Test plan - [x] `pytest tests/ -k competitors` → **51 passed, 3 skipped**. - [x] `ruff check` → clean. - [ ] Post-deploy: smoke `POST /competitors` → `active_count > 0` при наличии данных. Closes #1213
bot-backend added 1 commit 2026-06-13 05:41:12 +00:00
fix(competitors): _ACTIVE_STATUSES = русские значения как у домрф (#1213)
All checks were successful
CI / changes (push) Successful in 7s
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (push) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (push) Successful in 6m26s
CI / backend-tests (pull_request) Successful in 6m28s
eee5e4bac5
_ACTIVE_STATUSES = frozenset({"sales", "construction"}) — английский словарь
никогда не совпадал с domrf_kn_objects.site_status, который scraper берёт
СЫРЫМ из siteStatus дом.рф (domrf_kn.py:316). Реальные prod-значения
русские: «Строящиеся»/«Сданные».

Прод-аудит:
- data/sql/105_add_sales_started_flag.sql фильтрует по 'Строящиеся' (~1322 строки).
- partial index 66_indexes_recommend.sql использует те же.
- analytics_queries.py, MarketTab.tsx, CompetitorTable.tsx — все на русских.

Эффект: у ВСЕХ Competitor в POST /parcels/{cad}/competitors is_active=False
и CompetitorsSummary.active_count=0 при любых данных — типизированный
контракт систематически врал.

Patch: _ACTIVE_STATUSES = frozenset({"Строящиеся"}). Заодно обновил два
unit-теста которые кодировали баг (использовали "sales"/"construction"
в моках, тестировали логику против сломанного словаря). Теперь моки
матчат реальную prod-форму.

51/51 competitors-тестов зелёные. ruff clean.

Closes #1213
bot-backend merged commit 8f3e461959 into main 2026-06-13 05:53:17 +00:00
bot-backend deleted branch fix/competitors-active-statuses-ru-values 2026-06-13 05:53:17 +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#1257
No description provided.