Hand-rolled детерминированный DCF (без numpy-financial/новых deps): _npv / _irr_monthly (bisection с bracket-guard) / _payback_months над помесячным cashflow, построенным из статического каскада (PR-1) + калиброванной цены (PR-2) по дефолтным нормативам фаз (ПИР 6мес → СМР по development_type 24/36/48 → распродажа, дисконт 15%). - Налоги прорейтятся на признание выручки → Σ недисконтированного cashflow == net_profit (ИНВАРИАНТ, тест — гарантия что DCF не разошёлся со статикой). - IRR настоящий когда есть смена знака; вырожденный поток → fallback на roi-proxy (irr_is_proxy=True). Честно помечено. - График продаж привязан к завершению стройки: sales_end = max(sales_start + длительность, construction_end) — продажи не заканчиваются раньше ввода (РФ ДДУ/эскроу). Без этого high_rise распродавался за 12 мес ДО ввода → двойная смена знака → profitable-проект молча падал в proxy + инверсия NPV. - FinancialModel +npv_rub/payback_months/discount_rate_used/schedule_is_default (additive). development_type проброшен через placement. - UI/PDF: NPV/IRR/PBP + честный caveat «график — типовое допущение, точность зависит от него». api-types регенерён авторитетно. mypy strict clean (generative.*), +15 тестов (DCF helpers на учебных значениях, ИНВАРИАНТ, IRR real-vs-proxy обе ветки, PBP, sales≥construction для всех типов, profitable high_rise → настоящий IRR). 48 passed. Refs #1881 |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| chat.py | ||
| complex_buildings.py | ||
| concept.py | ||
| custom_poi.py | ||
| insight.py | ||
| job_settings.py | ||
| location.py | ||
| market.py | ||
| nspd_bulk.py | ||
| own_project.py | ||
| parcel.py | ||
| recommend.py | ||
| trade_in.py | ||