fix(ptica): невозможные параметры регламента не превращаются в деньги (#2464) #3000
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#3000
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2464-building-pct-guard"
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?
Дефект
synthesize_teap_from_buildabilityпроверяла параметры градрегламента только на> 0:Процент застройки 150 на участке 10 000 м² даёт пятно 15 000 м² — больше самого участка. Дальше из него считаются жилая площадь, число квартир, парковки и выручка: физически невозможные числа, поданные как обычные цифры финмодели. КСИТ 500 даёт GFA 5 000 000 м² на гектаре.
Параметры приходят из ПЗЗ-регламента (
zone_regulation_cache) — это внешние разобранные данные, то есть граница доверия.Правка
Невозможное значение отбрасывается, а не роняет расчёт: если рядом есть КСИТ, GFA считается по нему и остаётся верной. Если вменяемых параметров не осталось —
None, и caller штатно показывает отсутствие финоценки с caveat, а не ноль.Границы взяты с запасом к реальным данным прода 20.08.2026 (33 строки
zone_regulation_cache):max_building_pctmax_farmax_floorsЭто сито против порчи разбора, а не норматив: запас более чем семикратный.
Второй дефект — нашли эти же тесты
Ветка «нет ни процента, ни этажности → пятно = GFA» неявно предполагает один этаж. При КСИТ > 1 она давала пятно больше участка: 10 000 м² с far=2 → пятно 20 000 м². Это существовало и до моей правки, без всяких невозможных входных значений.
Добавлен физический инвариант «пятно ≤ участок» — не эвристика, а геометрия. Стоит один раз после всех ветвей, чтобы держаться и для будущих способов оценки пятна. GFA при этом не меняется.
Как проверено
origin/mainчетыре теста красные с конкретными невозможными значениями:пятно 15000.0 больше участка 10000.0;использован невозможный КСИТ: GFA=5000000.0;пятно 20000.0 на участке 10000.0(второй дефект — красный на main сам по себе).(pct, far, floors), взятых дословно с прода —(80, 2.4, 2),(100, 4, 5),(80, 2.5, None),(None, 4, None),(40, None, 10); плюс границаpct = 100 %, которая законна и на проде встречается.pytest backend/tests/services/site_finder/— 656 passed; смежныеtest_parcel_financial+services/generative— 185 passed.Текущих ошибок на проде нет
Проверено: в
zone_regulation_cache33 строки, значений вне диапазона 0. Правка предупредительная для первой части и исправляющая для второй: инвариант «пятно ≤ участок» нарушался бы уже на сегодняшних данных при сочетании «КСИТ есть, процент и этажность отсутствуют».Часть эпика #2464.