feat(site-finder): bridge финмодели (DCF) в кокпит Investment Clearance (epic #1881 PR-4) #1885
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#1885
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/finmodel-sitefinder-bridge"
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
Эпик #1881 PR-4 (финал) — Investment Clearance в site-finder кокпите больше не «—». Синтезируем лёгкий ТЭП из buildability участка (площадь + предельные параметры зоны НСПД/ПЗЗ: КСИТ/%застройки/этажность) → прогоняем через полноценную финмодель (каскад PR-1 + калибр.цена PR-2 + помесячный DCF PR-3) → GDV/Cost/Profit/ROI/IRR/NPV/PBP в кокпите.
Backend
app/services/site_finder/parcel_financial.py(ЧИСТЫЕ функции, без БД):synthesize_teap_from_buildability(GFA=area×max_far, degradation pct+floors; residential=GFA×eff; apartments/parking — нормативы изteap.py, не дублируются) +synthesize_parcel_financial(housing_class из цены, development_type из этажей, land=кадастровая). None когда нельзя строить МКД / нет зонинга / нет площади.parcels.py: 1 вызов вtry/except(hot-path-safe → None при сбое) + ключfinancial_estimateв /analyze. Схема не тронута (extra="allow"→ codegen не нужен). +18 тестов.Frontend
ParcelFinancialEstimateтип (hand-typed).adaptInvestmentClearance(financial)/adaptFinanceDrawer(financial): реальные числа (GDV/Cost/Profit/ROI/IRR + NPV + срок окуп.) или честный placeholder когда null. Локализация класса/типа (high_rise→высотная). analysis прокинут через PticaBottomGrid/drawer-registry. +6 тестов, 144 passed.Honesty (critical — показывается финдиректору)
HEAVY caveat везде: ОРИЕНТИРОВОЧНАЯ модель по МАКС.застройке НСПД, НЕ реальная концепция; land=кадастровая (не рыночная); график — типовой; IRR proxy-флаг; price_is_calibrated источник. null → честный placeholder, не выдумка.
Test plan
Закрывает эпик #1881
Финмодель = полноценная девелоперская DCF, видна в кокпите. Follow-up: финансирование (кредит/займы 15%), §22 sales-pace вместо дефолта, гео-радиус калибровки, mock-фикстура с financial_estimate для локального preview.
Refs #1881
🤖 Generated with Claude Code