# MVP-3 «Маржа, НЗП, актирование» — Design Draft | | | |---|---| | Дата | 2026-05-13 | | Статус | **Draft — фиксация обсуждённого, требует доработки после MVP-2** | | Зависимости | MVP-1 + MVP-2 (есть core.employee, core.project, core.stage, core.work_log) | | Срок | 2-3 недели после MVP-2 | > **Назначение этого документа:** зафиксировать то, что уже обсудили по MVP-3, чтобы не вспоминать заново. Это **набросок**, не финальная спека. ## Цели MVP-3 Финансовая аналитика по проектам: маржа план/факт, незавершёнка (НЗП), прогноз актирования следующего месяца, контроль подписания результирующих документов. ### Главные бизнес-вопросы - Какая маржа по проектам (план/факт)? - Сколько НЗП (незавершёнки) на каждом активном проекте? - Сколько денег будем актировать в следующем месяце? - Где отстаём по срокам подписания актов? - Какая общая себестоимость и себестоимость по закрытым актам? ## Что добавляем к MVP-1/2 ### Расширение core ```sql core.project_finance ( id bigserial PRIMARY KEY, project_id bigint REFERENCES core.project, stage_id bigint REFERENCES core.stage, scenario_code text, -- план | факт | прогноз (из Catalog.СценарииПланирования BIT.RA) analytics_type text, -- ВидАналитики из BIT.RA (рассмотреть в core или хранить как есть) employee_id bigint REFERENCES core.employee, period_date date, -- дата движения sum_total decimal(15,2), -- Сумма (плановая/фактическая) sum_acted decimal(15,2), -- СуммаАкт sum_expense decimal(15,2), -- СуммаРасход source_doc_id text -- ссылка на Document.ПланФактПроектныхПоказателей_v2 ) -- Возможно понадобится: core.stage_act ( id bigserial PRIMARY KEY, stage_id bigint REFERENCES core.stage, plan_act_date date, -- плановая дата акта (из Catalog.ЭтапыПроектов.ДатаОкончания) actual_act_date date, -- фактическая дата подписания (если известно) is_signed boolean, sum_planned decimal(15,2), sum_actual decimal(15,2) ) ``` ### Новые витрины ``` mart.project_margin — маржа план/факт по проекту: (Сумма_план - СуммаРасход_план) / Сумма_план и аналогично для факта mart.wip — НЗП = Σ(часы × ставка) - актированная_выручка по проекту/этапу mart.actuation_forecast — прогноз актирования: открытые этапы с ДатаОкончания в следующем месяце и Σ их Сумма mart.deadline_risks_financial — риски по подписанию документов (расширение mart.deadline_risks из MVP-2 на финансовую сторону) mart.cost_summary — общая себестоимость и себестоимость по закрытым (АктПодписан=true) этапам ``` ### Источники данных (помимо MVP-1/2) - **BIT.RA эндпоинт `/api/project_register`** — `AccumulationRegister.ОборотыПроектныхПоказателей_v2` с инкрементом (измерения Сценарий+Проект+Этап+ВидАналитики+Исполнитель → ресурсы Сумма+СуммаАкт+СуммаРасход). - **BIT.RA эндпоинт `/api/plan_fact_v2`** — `Document.ПланФактПроектныхПоказателей_v2`. **ValueStorage поле `ХранилищеДерева` не тянем** (по [identity-and-scope](../../memory/feedback_identity_and_scope.md)). - **BIT.RA эндпоинт `/api/lurv`** — `Document.ЛУРВ` для понимания фактически выписанных листов учёта результатов выполнения. ### Дашборд (расширение) Новый дашборд «Финансы проектов» в Metabase: - Плитка «Общая НЗП» (сумма по всем активным проектам). - Плитка «Прогноз актирования за следующий месяц». - Таблица «Маржинальность проектов» — проект, план-маржа, факт-маржа, отклонение, цвет светофор. - Таблица «Этапы к актированию в этом/следующем месяце» — этап, плановая дата, сумма, готовность. - График «Динамика НЗП по проектам» за 12 месяцев. ## Open questions (для финализации перед стартом MVP-3) - **Что считать НЗП именно?** Текущая идея — `Σ(core.work_log.hours × core.employee.rate) − Σ(core.project_finance где сценарий=факт-акт)`. Но если расход в `ОборотыПроектныхПоказателей_v2.СуммаРасход` уже считается по факту работ — это будет двойной счёт. Уточнить семантику регистра. - **Сценарии (`Catalog.СценарииПланирования` BIT.RA)** — какие реально используются? План, факт, прогноз? Нужно понять словарь. - **`ВидАналитики` в регистре** — что это за измерение, какие значения? Возможно нужно тянуть `Catalog.ВидыАналитикиПроектныхПоказателей` (или подобное). - **Связь с финрезом подразделений (MVP-4)** — финрез считается из выручки и расходов, маржа проектов — тоже. Не дублируем ли мы расчёты? Возможно MVP-3 и MVP-4 нужно объединить или строго разграничить (MVP-3 = разрез по проектам, MVP-4 = разрез по подразделениям). - **Контроль подписания документов** — нужны ли дополнительные сущности (Договоры, ДополнительныеСоглашения)? Они есть в BIT.RA `Catalog.Договоры` и в ТЧ `Проекты.ДокументыЭтапов`. ## Зависимости от MVP-2 MVP-3 стартует когда: - ✅ MVP-2 работает (есть core.stage, deadline-логика). - ✅ Identity-map проектов BIT.RA ↔ EVA стабильна. - Полезно но не обязательно: восстановлена обработка `СинхронизацияДанныхEVA_РА` (для стабильного маппинга проектов).