gendesign/backend/tests
Light1YT 65bab902e1
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Successful in 1m5s
CI / openapi-codegen-check (pull_request) Successful in 1m58s
CI / backend-tests (pull_request) Successful in 10m10s
feat(generative): full static developer financial cascade (epic #1881 PR-1)
Объединяет наше (площади из реальной геометрии teap) + полноту девелоперской
Excel-модели (каскад затрат + БДР с налогами). Расширяет financial.py из
статического GDV−COST в полный статический расчёт. БЕЗ DCF (PR-3), БЕЗ новых
вводных от пользователя — только нормативы + существующий TEAP.

Каскад (financial.py):
- Выручка: жильё (residential×price) + ПАРКИНГ (spaces×1.9М)
- Затраты: СМР(резид+паркинг) + ПИР 2.5% + сети/ТУ 6000₽/м² + услуги заказчика
  1.5% + резерв 3% + маркетинг/риэлтор 7% выручки + земля
- БДР: валовая маржа → НДС (упрощённо) → прибыль до налога → налог 25% (ФЗ
  176-ФЗ) → ЧИСТАЯ прибыль → ROI + чистая маржа%
- Нормативы документированы (источник: Excel-эталон «Авангардная 13» + RU-рынок)

FinancialModel (concept.py): +16 additive-полей (revenue breakdown, cost cascade,
БДР/налоги, roi, margin_pct, irr_is_proxy). Старые 4 поля сохранены (backward-compat).

IRR честно помечен irr_is_proxy=True (annualized net ROI, не DCF) — настоящий
IRR/NPV/PBP в PR-3 (помесячный cashflow). НДС — документированное упрощение, не
точный НК РФ. Офисы пропущены (нет площади в TEAP).

PDF + concept UI: полный БДР-каскад + чистая прибыль/ROI + честные сноски.
api-types.ts регенерён авторитетно (openapi-typescript + prettier, как CI).

mypy strict clean (generative.*), +тесты (каскад/паркинг/налоги/backward-compat/
edge cost=0), 36 passed.

Refs #1881
2026-06-23 16:45:58 +05:00
..
api feat(analyze): surface real ПЗЗ regulation (КСИТ/height) into nspd_zoning 2026-06-20 23:24:22 +05:00
fixtures feat(macro): land construction price index (СМР) via open Rosstat xlsx (#946) 2026-06-09 11:28:05 +05:00
integration test(parcels): integration EXPLAIN-gate для analyze hot-path SQL (#1198) 2026-06-13 09:43:49 +05:00
scrapers fix(sql): EMISS PK includes period_type so yearly+Q1 coexist (#1606 follow-up) 2026-06-17 21:27:34 +03:00
scripts fix(backtest): add binomial significance gate to §9.6 verdict 2026-06-04 16:42:45 +05:00
services feat(generative): full static developer financial cascade (epic #1881 PR-1) 2026-06-23 16:45:58 +05:00
smoke fix(parcels): _parse_floors handle int (post-migration #169) (#176) 2026-05-15 15:08:16 +03:00
sql feat(analytics): velocity-anomaly alerts (#17) + ARN ДДУ price indicator (#99) 2026-06-13 22:04:49 +05:00
workers merge main + renumber 163→167 + guard riasurt harvest (#108 review) 2026-06-17 22:52:15 +03:00
__init__.py init 2026-04-25 13:45:19 +03:00
conftest.py test(rbac): test-mode bypass so api/v1 suite can authenticate (CI-rehab 1/3) 2026-06-03 18:29:20 +05:00
test_admin_weight_profiles.py test(suite): re-align drifted tests with current code (CI-rehab 2/3) 2026-06-03 19:05:43 +05:00
test_audit_middleware.py feat(insights): manual-entry Insight entity CRUD + §19 audit (#948 part A) 2026-06-08 12:41:39 +05:00
test_concepts_stub.py feat(generative): движок концепций Stage 1a/1b/1c (#54 #55 #56) 2026-06-13 21:32:32 +05:00
test_ekb_geoportal_client.py fix(sf): ekb_geoportal_client verify=False — росс-гос-CA не в trust-store контейнера (#1103) 2026-06-06 20:10:26 +00:00
test_gate_verdict.py test(site-finder): cover is_residential_zone raw_props/subcategory branch (#1353 follow-up) 2026-06-17 21:22:04 +03:00
test_health.py init 2026-04-25 13:45:19 +03:00
test_layout_signature.py feat(parcels): layout signature schemas + extractor (#113 PR A) (#193) 2026-05-16 07:52:34 +00:00
test_layout_tz_pdf.py test(suite): re-align drifted tests with current code (CI-rehab 2/3) 2026-06-03 19:05:43 +05:00
test_network_obremenenie.py feat(site-finder): сетевые обременения из ЗОУИТ (#1070, Refs #103) (#1328) 2026-06-14 14:49:32 +00:00
test_noise_loader.py feat(site_finder): routing POI decay (#41) + OSM utility distances (#44) + ЗОУИТ geom (#255bk) 2026-06-13 22:31:56 +05:00
test_nspd_client.py feat(nspd): get_feature_info FEATURE_COUNT=10 — multi-feature per point (#1080) 2026-06-06 18:18:07 +00:00
test_nspd_sync.py fix(#244): harvest_quarter — CAST CASE WHEN params (psycopg3 AmbiguousParameter) (#246) 2026-05-17 05:53:08 +00:00
test_ors_client.py feat(site_finder): routing POI decay (#41) + OSM utility distances (#44) + ЗОУИТ geom (#255bk) 2026-06-13 22:31:56 +05:00
test_ping.py feat(backend): add /api/v1/ping liveness endpoint (#634) 2026-05-29 15:53:29 +00:00
test_poi_score.py fix(site-finder): correct POI-score mock shape+values, routing empty assert (#1486 review) 2026-06-17 20:47:01 +03:00
test_quarter_dump_lookup.py fix(site_finder): read real NSPD territorial-zone keys in _get_zoning 2026-06-20 20:29:45 +05:00
test_rbac.py feat(rbac): add analyst role + §19 audit-log middleware (#962) 2026-06-08 12:16:19 +05:00
test_riasurt_sverdl_client.py feat(site-finder): РИАСУРТ Свердл 14-layer harvest client+schema+task for ЕКБ agglomeration (#108) 2026-06-17 21:49:04 +03:00
test_saturation.py feat(site-finder): POI saturation per capita по районам ЕКБ (#42) (#1329) 2026-06-14 15:05:22 +00:00
test_sentry_init.py feat(backend): sentry-sdk init для FastAPI + Celery (#204 backend) (#207) 2026-05-16 15:09:16 +00:00
test_velocity.py fix(site-finder): velocity fallback 4500→750, coverage/proxy disclosure, market_trend staleness honesty (audit #1871 P2) 2026-06-23 12:04:08 +05:00
test_weight_profiles.py feat(site-finder): weight profiles service — Pydantic + CRUD (#114 sub-PR 2/4) (#137) 2026-05-15 00:29:37 +03:00