Финмодель брала ПЛОСКИЕ parking-константы для ВСЕХ классов: price 1.9М/cost 1.8М (Excel «Авангардная 13» premium — подземная, near break-even). Но норма парковки уже class-dependent (econom 0.8/comfort 1.0/business 1.5 м/м на квартиру). Econom (дешёвое жильё) заряжался 1.8М/м/м ПОДЗЕМНОЙ застройки → огромный break-even капитал, раздувающий пиковый долг/проценты. По РФ econom = наземная дешёвая парковка. Фикс: _PARKING_PRICE_PER_SPOT / _PARKING_COST_PER_SPOT → dict[HousingClass]: - econom 800k/350k (наземная), comfort 1.3М/1.0М (частично подземная), business 1.9М/1.8М (подземная, = Excel, unchanged). - маржа/м/м: econom +450k, comfort +300k, business +100k. - НОРМА парковки (_PARKING_PER_APARTMENT) НЕ тронута (возможно ПЗЗ-норматив). - Константы помечены как TUNABLE ASSUMPTIONS (РФ-рынок), правятся в одном месте (паттерн _SALE_PRICE_PER_SQM / _CONSTRUCTION_COST_PER_SQM). ВАЖНО (честно): парковка — ВТОРИЧНЫЙ драйвер. Улучшает econom в основном через снижение peak-debt/процентов, НЕ переворачивает знак. ДОМИНИРУЮЩИЙ рычаг — себестоимость СМР жилья к выручке (econom 72k на GFA vs выручка на sellable = 87%) — отдельное продуктовое решение (не трогаю без согласования). Инвариант Σ cashflow == net_profit сохранён (меняются только величины revenue_parking/construction_parking в том же каскаде). Тесты: +6 (по классам, маржа, инвариант econom+parking) + 3 существующих исправлены (хардкод comfort 1.9/1.8 → 1.3/1.0). tests/services/generative 90 passed. ruff+mypy(strict) чисто. Схема не менялась. Хозяйственное: untrack + gitignore backend/.coverage (артефакт блокировал checkout). Refs #1881 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 line
10 B
Text
1 line
10 B
Text
.coverage
|