From 6b4b081c44e727fa74e53852b1d5c0f475029c37 Mon Sep 17 00:00:00 2001 From: Light1YT Date: Thu, 25 Jun 2026 16:27:17 +0500 Subject: [PATCH] feat(financial): surface office revenue in PDF + concept UI (offices presentation) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Office tranche was computed but invisible in both export surfaces (жильё+паркинг < GDV with an unexplained gap). Add «Выручка — нежилое (1-й этаж)» row to the PDF financial table + concept cascade; relabel PDF VAT row «НДС (нежилое: паркинг + коммерция)». Add office_area_sqm/revenue_office_rub to hand-maintained concept-api types; make teap_synth.office_area_sqm optional in site-finder types (dev mock on main lacks it). Fix ptica finance fixture for required revenue_office_rub. Refs #1881 --- backend/app/services/generative/exporters/pdf.py | 9 ++++++++- .../src/components/concept/ConceptVariantsResult.tsx | 4 ++++ .../ptica/__tests__/ptica-adapt.honesty.test.ts | 2 ++ frontend/src/lib/concept-api.ts | 4 ++++ frontend/src/types/site-finder.ts | 6 ++++-- 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/backend/app/services/generative/exporters/pdf.py b/backend/app/services/generative/exporters/pdf.py index b2b2b86b..ef3d1414 100644 --- a/backend/app/services/generative/exporters/pdf.py +++ b/backend/app/services/generative/exporters/pdf.py @@ -119,6 +119,10 @@ def _financial_table(variants: Sequence[ConceptVariant]) -> str: "Выручка — паркинг, млн руб", [_fmt_money(v.financial.revenue_parking_rub) for v in variants], ), + ( + "Выручка — нежилое (1-й этаж), млн руб", + [_fmt_money(v.financial.revenue_office_rub) for v in variants], + ), ("Выручка (GDV), млн руб", [_fmt_money(v.financial.revenue_rub) for v in variants]), ("СМР, млн руб", [_fmt_money(v.financial.construction_rub) for v in variants]), ("ПИР, млн руб", [_fmt_money(v.financial.pir_rub) for v in variants]), @@ -132,7 +136,10 @@ def _financial_table(variants: Sequence[ConceptVariant]) -> str: ("Земля, млн руб", [_fmt_money(v.financial.land_rub) for v in variants]), ("Итого затраты, млн руб", [_fmt_money(v.financial.cost_rub) for v in variants]), ("Валовая маржа, млн руб", [_fmt_money(v.financial.gross_margin_rub) for v in variants]), - ("НДС (паркинг), млн руб", [_fmt_money(v.financial.vat_rub) for v in variants]), + ( + "НДС (нежилое: паркинг + коммерция), млн руб", + [_fmt_money(v.financial.vat_rub) for v in variants], + ), ( "Прибыль до налога, млн руб", [_fmt_money(v.financial.profit_before_tax_rub) for v in variants], diff --git a/frontend/src/components/concept/ConceptVariantsResult.tsx b/frontend/src/components/concept/ConceptVariantsResult.tsx index 3d5b3b3e..fcc1e769 100644 --- a/frontend/src/components/concept/ConceptVariantsResult.tsx +++ b/frontend/src/components/concept/ConceptVariantsResult.tsx @@ -392,6 +392,10 @@ function FinancialCascadeTable({ financial }: { financial: FinancialModel }) { label="Выручка — паркинг" value={formatMoneyCompact(financial.revenue_parking_rub)} /> +