fix(competitors): _ACTIVE_STATUSES = русские значения как у домрф (#1213) #1257
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1257
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/competitors-active-statuses-ru-values"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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}/competitorsis_active=FalseиCompetitorsSummary.active_count=0при любых данных. Типизированный контракт систематически врал. Английские значения были только в самомfrozensetи в моках двух unit-тестов — тесты кодировали баг.Fix
_ACTIVE_STATUSES = frozenset({"Строящиеся"}).test_competitors_summary_calc,test_competitors_is_active_flag) обновлены:"sales"/"construction"→"Строящиеся"для активных,"completed"→"Сданные"для неактивных. Логика тестов не изменена.Test plan
pytest tests/ -k competitors→ 51 passed, 3 skipped.ruff check→ clean.POST /competitors→active_count > 0при наличии данных.Closes #1213
_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