Skip to content

План и факт ​

Смета считается до проекта, и расходы в ней номинальные. По ходу проекта расходы становятся реальными: часы команды, счета поставщиков, перевозки, командировки. Раздел «ТЗ и смета → План и факт» сравнивает одно с другим по разделам сметы. Этап 7 ТЗ «смета → документы → расходы → план и факт».

План ​

План — действующая смета: согласованная, а пока её нет — последняя версия не в архиве. Тогда карточка пишет «Смета ещё не согласована — план по версии N».

  • По разделам: себестоимость (что будет стоить нам) и цена (что заплатит клиент, со скидками).
  • Строки раскрываются: наименование, количество, себестоимость и цена.
  • Выручка по смете — итог сметы с налогами. Он же — плановый бюджет проекта.

Плановый бюджет пишется при согласовании сметы (projects.planned_budget). Пока согласованная смета есть, руками он не меняется:

  • в карточке и в «Деньгах проекта» поле закрыто с причиной «Итог согласованной сметы»;
  • сервер отвечает 409 projects_planned_budget_from_estimate.

Изменить бюджет можно новой версией сметы. У проектов без согласованной сметы поле по-прежнему правится.

Факт ​

Факт собирается сам из журнала расходов проекта (project_cost_items, actual_amount).

ИсточникКак попадает в фактРаздел сметы
Часы командычасы × себестоимость часа сотрудника«Команда»
Документы поставщиковоплаченная сумма (Документы поставщиков)раздел документа
Перевозкифактическая стоимость операции«Перевозки»
Субаренда и закупкастоимость операции«Оборудование»
Командировкифактическая стоимость«Командировки»
Ручные статьифакт статьипо статье
  • Своё оборудование в факт не идёт: его себестоимость в проекте — 0.
  • Статья журнала попадает в раздел своего вида (tech → оборудование, labor → команда, …). Если такого раздела в смете нет — в строку «Вне сметы».
  • Документ поставщика попадает в свой раздел: вид + название.
  • Часы команды в разделе показываются одной строкой «Часы команды · N записей».

Себестоимость часа — та же, что в смете. Порядок:

  1. ставка участника команды проекта;
  2. себестоимость часа сотрудника на дату записи (user_rates);
  3. профиль оплаты (почасовой или оклад / норма часов);
  4. ставка отдела.

Пересчёт: finance.SyncLaborCosts после записи времени, задач и утверждения табеля.

Отклонение и исполнение ​

  • Отклонение = факт − план. Плюс — перерасход, красным.
  • Исполнение = факт / план. Полоса дорастает до 100 % и краснеет при перерасходе.
  • «Вне сметы» — факт без плана, весь он перерасход.

Итоги по проекту:

  • план, факт, отклонение, исполнение;
  • маржа по смете — цена сметы − себестоимость сметы;
  • ожидаемая маржа — цена сметы − фактические расходы.

Выручка:

  • по смете;
  • выставлено — счета, кроме черновиков и отменённых;
  • оплачено — оплаченный счёт целиком, у остальных — разнесённые проведённые платежи;
  • к оплате.

«Заработок» над карточкой — прежний расчёт: оплаченная выручка − фактические расходы.

Динамика бюджета ​

График «Динамика бюджета»:

  • План — себестоимость действующей сметы. Если сметы нет — плановые суммы статей, как раньше.
  • Факт — накопленный итог по неделям. Дата расхода берётся из источника:
    • запись времени;
    • прибытие перевозки;
    • командировка;
    • последняя проведённая оплата документа поставщика;
    • для ручных статей — дата создания.

Кто видит ​

Раздел открыт тем, у кого открыты финансы проекта и есть бюджет клиента или затраты. Внутри сервер скрывает поля по правам:

ЧтоНужно
себестоимость, факт, отклонение, исполнение, из чего сложился факт, внутренние строкизатраты (costs)
цены, выручкабюджет клиента (client_budget)
маржаearnings_margin и оба права выше

«Что дальше» ​

Карточка на обзоре проекта показывает один следующий шаг по пути проекта с кнопкой, которая ведёт на нужную вкладку и раздел. Шаги по порядку:

  1. ТЗ. «Загрузите и согласуйте ТЗ», пока оно на согласовании — «ТЗ на согласовании». Этот шаг видят все: без ТЗ по проекту не платят.
  2. Смета. «Составьте смету» → «Отправьте смету клиенту» → «Ждём решения клиента» (открыл ли клиент ссылку) или «Клиент просит изменения».
  3. Договор. «Клиент согласовал — сформируйте договор».
  4. Счёт. «Выставьте счёт на аванс».
  5. Оплата. «Ждём оплату от клиента»: сколько осталось получить — сумма видна с бюджетом клиента.
  6. Работа. «Проект в работе»: факт копится сам.
  7. Акт. Проект сдан без акта — «Закройте проект актом». Акт выставлен — «отметьте подписание». Всё подписано и оплачено — «проект можно закрывать».

Рядом — что ждёт действий:

  • расходы поставщиков к подтверждению;
  • расходы сверх сметы, которые ждут финансов;
  • согласованные расходы к оплате.

Денежные шаги видны при финансах проекта. У закрытого, отменённого и проигранного проекта шага нет.

Карточка обновляется сама после смены статуса, ТЗ, сметы, документов, расходов и платежей.

API ​

  • GET /api/v1/projects/:id/budget/plan-fact — план и факт по разделам, итоги, выручка;
  • GET /api/v1/projects/:id/budget/dynamics — динамика (план — из сметы);
  • GET /api/v1/projects/:id/next-step — «Что дальше».

Где в коде ​

  • internal/modules/budget/planfact.go — сборка, разнесение факта по разделам, скрытие по правам;
  • internal/modules/estimates/service.go (ProjectPlan) — план из сметы;
  • internal/modules/nextstep — правила шага (Decide) и состояние проекта одним запросом;
  • internal/modules/finance/labor.go — факт часов;
  • фронт: BudgetPlanFactCard.vue, ProjectNextStepCard.vue, usePlannedBudgetLock.ts.

Загружаем документацию…