fix(ptica): достоверность видит зону ПЗЗ из НСПД, а не только из пустой таблицы (#2464) #2933
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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#2933
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2464-confidence-zoning-source"
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?
Отчёт противоречил сам себе
_compute_confidenceполучал зону ПЗЗ только из legacy-словаряzoning, который питается таблицейpzz_zones_ekb. На проде она пуста — 0 строк (замер 19.08), поэтомуdata_availableтам всегдаFalse.Настоящая зона живёт в
nspd_zoning: территориальные зоны дампа НСПД, а для участков в зазорах между зонами она синтезируется резолвером геопортала (см. комментарий PR-A#financial-zoning-decoupleвыше по файлу).Прогон
analyzeв прод-контейнере, участок66:41:0402029:25:Один и тот же ответ показывает зону Ж-5 и заявляет, что зона неизвестна.
Цена
Подскоров семь, значит в композите теряется
(1.0 − 0.2) / 7 = 0.114: пользователь видит 0.61 там, где честно 0.72. Это не единичный случай:territorial_zonesесть у 78.3% собранных кварталов (524 из 669), плюс геопортал добирает участки в зазорах — то есть занижение работает почти на каждом анализе ЕКБ.Тесты переписаны после самопроверки
Первая версия падала на
origin/mainсTypeError: unexpected keyword argument 'nspd_zoning'. Это красное означает «возможности нет», а не «значение неверно» — и мои «контроли» падали ровно там же, то есть контролями не были: красное «нет параметра» неотличимо от красного «результат неправильный».Переделал:
origin/maintest_analyze_does_not_claim_unknown_zone_when_nspd_resolved_ittest_nspd_zone_counts_as_knowntest_regulation_zone_index_also_countstest_composite_gain_matches_the_measured_costtest_no_zone_anywhere_keeps_the_caveattest_legacy_source_still_honouredКонтроли не передают новый аргумент вовсе — поэтому исполняются по обе стороны. Первый тест дополнительно сторожит проводку: параметр можно добавить в функцию и забыть передать на вызове, и все остальные проверки останутся зелёными.
test_composite_gain_matches_the_measured_costпришпиливает и число подскоров (7), и прирост композита (0.11) — если кто-то добавит восьмой подскор, тест потребует пересчитать цену, а не промолчит.pytest tests/api/v1: 354 passed, 1 skipped, rc=0 (код возврата снят без конвейера).Что рядом и НЕ входит в этот PR
_build_zoningвfull_report_html.py:460при пустомnspd_zoningи заполненном legacyzoningпроваливается мимоreturnи строит таблицу из пустого словаря. Дефект реальный, но недостижим: ветка требует непустогоzoning.zone_code, а таблицаpzz_zones_ekbпуста. Отмечу в эпике замером, чинить сейчас — менять код, который нельзя исполнить.Refs #2464
_compute_confidence получал зону ТОЛЬКО из legacy-словаря `zoning`, который питается таблицей pzz_zones_ekb. На проде она пуста — 0 строк (замер 19.08), поэтому data_available там всегда False. Настоящая зона живёт в nspd_zoning: территориальные зоны дампа НСПД, а для участков в зазорах между зонами она синтезируется резолвером геопортала (см. PR-A #financial-zoning-decouple). Из-за этого подскор «zoning» был 0.2 у КАЖДОГО участка, а оговорка утверждала неправду. Прогон analyze в прод-контейнере, участок 66:41:0402029:25: nspd_zoning.zone_code = 'Ж-5' <- зона известна zoning.data_available = False confidence = 0.61 medium подскор zoning = 0.2 оговорка: «ПЗЗ zone_code не известен — нельзя оценить разрешённое использование (G1 pending)» Один и тот же ответ показывал зону Ж-5 и заявлял, что зона неизвестна. Подскоров семь, цена в композите — (1.0 − 0.2)/7 = 0.114: 0.61 вместо 0.72. Тесты переписаны после самопроверки: первая версия падала на origin/main с TypeError, то есть красное означало «возможности нет», а не «значение неверно», и контроли падали там же — контролями они не были. Теперь контроли не передают новый аргумент и зелёные по обе стороны, а тест на уровне ручки красный ПО ПОВЕДЕНИЮ: «ответ показывает зону Ж-5 и одновременно заявляет, что зона неизвестна». Он же сторожит проводку — параметр можно добавить в функцию и забыть передать. Переформатирование — от pre-commit ruff 0.7.4 (#2864), не моё.Прод-проверка: тот же зонд, тот же участок, другой ответ
Вызов
analyze_parcelв работающем контейнере, участок66:41:0402029:25— ровно тот, на котором дефект был найден:Прирост 0.11 — ровно посчитанные
(1.0 − 0.2) / 7 = 0.114. Ложная оговорка исчезла, остальные две («POI старше 2 лет», «нет ДДУ в 3 км») на месте: правка не глушила предупреждения, а починила одно конкретное.Проверял не факт мержа, а поведение механизма: те же входные данные дают другой выход.