Skip to content

ТЗ: смета → документы → расходы → план и факт ​

Дата: 2026-09-30. Основа: план estimate-overhaul-plan.md (решения заказчика — в нём, раздел 6), разбор текущего кода денег и документов. Этап 1 плана — разбор ТЗ нейросетью — сделан.

Цель: сотрудник проходит путь от ТЗ клиента до закрытия проекта по понятным шагам, без ручного «планового бюджета» и без Excel на стороне. Смета — единственный источник цены и плана, документы собираются из шаблонов, расходы приходят документами поставщиков, план и факт считаются сами.


1. Что сейчас сломано (коротко) ​

Что видит сотрудникПричина
«Смета не формируется» / файл не найтиPDF загружается от «урезанного» сотрудника без прав его ролей — у многих 403; у остальных файл ложится вне папок, и без раздела документов его не видно; номер при сбое уже израсходован
Шаблонов нетAPI шаблонов есть, экрана нет; PDF по шаблону собирает заглушка без кириллицы — нечитаемо; сами документы нарисованы кодом
Менеджер не может выставить счётправо на счета снято с менеджеров; счёт всегда на всю смету — ни аванса, ни остатка
«Счёт № 1» у каждого клиентанумерация по клиенту, а не по нашему юрлицу
Документы нельзя поправитьнет черновиков, перевыпуска, удаления
Расходы не попадают в фактдокументов поставщиков нет; оплата расходным платежом не меняет факт статьи
План бюджета «с потолка»плановый бюджет вводится руками, смета — сумма статей по категориям
Оборудование не в сметевкладка «Оборудование» с бюджетом не связана
Предпросмотр Word/Excel не работаетLibreOffice в образе сервера нет

2. Путь сотрудника ​

Карточка проекта показывает «Что дальше» — один следующий шаг с кнопкой: «Составьте смету», «Отправьте смету клиенту», «Клиент согласовал — сформируйте договор», «Выставьте счёт на аванс», «Закройте проект актом».

Менеджер проекта ​

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

Финансы ​

  1. Документы поставщиков — счёт, акт, УПД: загрузить скан → помощник распознаёт поставщика, номер, дату, суммы, НДС (как реквизиты, этап 4 AI) → привязать к проекту и разделу сметы.
  2. Согласовать расход (сверх сметы — с пометкой «перерасход») → оплатить → факт проекта.
  3. Входящие платежи клиентов разносятся на счета — счёт становится «оплачен» (частично — «частично оплачен»).
  4. Финансы тоже выставляют счета, договоры, акты — те же экраны.

Клиент (по ссылке) ​

Видит смету по разделам с ценами (без себестоимости и наценки), итоги со скидкой и налогами; скачивает PDF; «Согласовать» (ФИО, комментарий) или «Нужны изменения» (комментарий). Ссылка живёт до отзыва или новой версии.


3. Смета ​

3.1 Модель ​

  • project_estimates — версия сметы: проект, номер версии, статус, версия ТЗ, наше юрлицо-продавец, налоговый режим и ставки на момент версии, наценка сметы, скидка сметы, итоги (снимок), кто и когда отправил и согласовал.
    • Статусы: черновик → отправлена клиенту → согласована | нужны изменения → архив (при новой согласованной версии прежняя — архив).
    • Править можно только черновик; «нужны изменения» → новая версия-черновик из этой.
  • project_estimate_sections — разделы: оборудование, перевозки, командировки, команда, подрядчики, материалы, креатив, прочее и свои; порядок; скидка раздела (процент или сумма).
  • project_estimate_lines — строки:
    • название для клиента, внутренний комментарий;
    • количество, единица, дни (оборудование) или часы (команда);
    • себестоимость за единицу и цена для клиента за единицу (по умолчанию = себестоимость × (1 + наценка сметы), округление до рубля; можно зафиксировать вручную);
    • источник: оборудование проекта, позиция каталога, перевозка, командировка, сотрудник, разбор ТЗ, вручную — и id источника;
    • «зафиксировано вручную» — сбор из проекта строку не перезаписывает;
    • «внутренняя» — не видна клиенту и не входит в цену (например, резерв на риски у себя);
    • порядок.

3.2 Расчёт (один движок на сервере, money.Money) ​

Себестоимость строки = количество × дни/часы × себестоимость за единицу
Цена строки          = количество × дни/часы × цена для клиента за единицу
Раздел               = Σ цен строк − скидка раздела
Сумма                = Σ разделов − скидка сметы
УСН                  = Сумма × ставка УСН            (если режим с УСН)
НДС                  = (Сумма + УСН) × ставка НДС     (если режим с НДС)
Итого клиенту        = Сумма + УСН + НДС
Маржа                = Сумма − Σ себестоимостей (в рублях и %)

Пример заказчика: позиция 1 000 → УСН 10 % = 1 100 → НДС 5 % от 1 100 = 1 155. При НДС 22 % (общая система) УСН нет.

  • Налоговый режим — у нашего юрлица (реквизиты): «общая система, НДС 22 %» или «УСН N % + НДС 0 / 5 / 7 %». Смета берёт режим юрлица-продавца проекта; в проекте можно переопределить.
  • Наценка одна на смету и клиенту не видна — она внутри цен строк.
  • Статья «налоги» наценкой и налогами не облагается повторно.
  • Клиент видит: разделы, строки (название, кол-во, дни/часы, цена за единицу, сумма), скидки, УСН и НДС строками по режиму, итого.

3.3 «Собрать смету» ​

РазделОткудаСебестоимостьЦена клиенту
Оборудованиепотребность проекта (вкладка «Оборудование») и разбор ТЗсвой склад — 0 (своё), субаренда и закупка — цена поставщикаставка аренды каталога за день × дни со скидкой за длительность 1 / 0,5 / 0,3 / 0,15 / 0,1 × кол-во
Перевозкиоперации логистики проекта (план), иначе оценочная строка «доставка и возврат»плановая стоимостьсебестоимость × (1 + наценка)
Командировкикомандировки проекта: билеты, жильё, суточныеплановая стоимостьсебестоимость × (1 + наценка)
Командакоманда проекта и часы из разбора ТЗ / сметы по ТЗчасы × персональная себестоимость часачасы × персональная ставка для клиента
Подрядчики, материалы, прочеевручную или из разбора ТЗвручнуюсебестоимость × (1 + наценка) или вручную
  • Повторный сбор показывает «что изменилось»: добавлено, изменилось, пропало — и не трогает строки, зафиксированные вручную.
  • Одна формула аренды на всю систему (заявки на оборудование, логистика и смета берут её из одного места).

3.4 Ставки сотрудников ​

  • user_rates — история ставок сотрудника: себестоимость часа и ставка для клиента, действует с даты. Правят финансы и администратор в карточке сотрудника («Ставки»); себестоимость видна по праву costs, ставка для клиента — по client_budget.
  • Если у сотрудника ставок нет: ставки должности → отдела (у отдела — две ставки вместо одной hourly_rate).
  • В команде проекта можно переопределить обе ставки на проект.
  • Факт труда (часы из задач × себестоимость часа) считается по той же ставке (сейчас — по часовой ставке команды или профилю компенсации).

3.5 Ссылка клиенту ​

  • «Отправить клиенту» → ссылка …/estimate/<token> (токен 32 байта, в базе — хэш), срок — до новой версии или отзыва; можно скопировать или отправить письмом контакту проекта.
  • Страница без входа: логотип и реквизиты нашей компании, проект, разделы и строки, итоги, «Скачать PDF», «Согласовать» (ФИО, комментарий) и «Нужны изменения» (комментарий). Никаких внутренних данных.
  • Менеджер видит «открыта клиентом» и решение; уведомление и обновление экрана сразу (синхронизация между пользователями).
  • Согласование — статус версии «согласована», запись в журнале действий (ФИО клиента, IP, время).

4. Документы и шаблоны ​

4.1 Шаблоны в Word ​

  • Шаблон — файл Word (DOCX) с полями {{…}}: администратор или финансы скачивают стандартный, правят в Word как обычный документ и загружают обратно. Таблицы строк — строкой-образцом {{#lines}} … {{/lines}}.
  • Шаблоны по видам: смета (КП), счёт, договор, доп. соглашение, акт; для каждого вида — шаблон по умолчанию и, при нескольких юрлицах, свой для юрлица.
  • Экран «Администрирование → Шаблоны документов»: список, скачать, загрузить новую версию, предпросмотр на данных любого проекта, список полей с примерами.
  • Поля: наша компания (название, реквизиты, банк, руководитель; место для подписи, без картинок подписи и печати), клиент (то же), проект (название, даты, площадка), документ (номер, дата), смета (разделы, строки, скидки, налоги, итого, сумма прописью), счёт (назначение, аванс/остаток, срок оплаты), договор (предмет, сроки, порядок оплаты).
  • Документ сохраняется в двух видах: DOCX (можно поправить руками) и PDF (для отправки).
  • Конвертер: отдельный сервис Gotenberg (LibreOffice и Chromium) в compose: Word → PDF для документов и заодно предпросмотр офисных файлов, который сейчас не работает.

4.2 Документ ​

  • Статусы: черновик → выпущен → отправлен → счёт: частично оплачен / оплачен, договор и акт: подписан; аннулирован — из любого, кроме оплаченного и подписанного.
  • Черновик правится и перевыпускается; выпущенный — только «перевыпустить» (новая версия, прежняя — «заменён»).
  • Номер выдаётся при выпуске, а не при черновике: по нашему юрлицу, виду и году, формат настраивается (СЧ-{год}-{номер}); неудачный выпуск номер не тратит (всё в одной транзакции, файл загружается до записи).
  • Файлы документов ложатся в папки проекта: смета — «Коммерческие предложения», договоры, доп. соглашения и акты — «Договоры и акты», счета — «Счета»; загрузку делает сервер от имени системы после проверки прав на документы проекта (без «урезанного» сотрудника).
  • Подписанный скан загружается к документу («Загрузить подписанный»).

4.3 Виды ​

ДокументИз чегоКто
Смета (КП)версия сметыменеджер проекта, финансы
Договорсогласованная смета, шаблон; создаёт запись в реестре договоров (юристы видят и ведут сроки)менеджер проекта (черновик), юристы и финансы (выпуск)
Счёт клиентусмета: аванс % / сумма, остаток, выбранные строки или свои строкименеджер проекта и финансы
Доп. соглашениеразница новой согласованной версии сметы с прежнейменеджер, юристы, финансы
Актсогласованная смета (с доп. соглашениями)менеджер проекта, финансы
Счёт без проектасвои строки, клиент из справочникафинансы

Права: менеджер проекта (запись карточки проекта + client_budget) выставляет счета и акты своих проектов — это меняет решение миграции 0150; финансы — по всем.


5. Расходы и оплаты ​

  • Документы поставщиков (supplier_documents): вид (счёт, акт, УПД, чек), поставщик (справочник поставщиков или компаний), номер, дата, суммы с НДС и без, проект и раздел или строка сметы, файл, статус получен → согласован → оплачен (частично — «частично оплачен»), кто согласовал.
  • Загрузка скана → помощник распознаёт поставщика, номер, дату, суммы, НДС и строки (механизм реквизитов из файла) → финансы проверяют и привязывают к проекту.
  • Согласование: менеджер проекта подтверждает «это наш расход»; финансовый директор согласует сверх сметы раздела («перерасход +N ₽»).
  • Оплата: исходящий платёж по документу поставщика (как сейчас по статье или обязательству); оплаченная сумма — факт раздела сметы.
  • Входящие платежи клиента разносятся на наши счета; частичная оплата — «частично оплачен», выручка проекта растёт на оплаченную сумму.
  • Обязательства (аренда склада и т. п.) при оплате получают дату факта.

6. План и факт ​

  • План = согласованная версия сметы: по разделам и строкам, себестоимость и цена. Ручного «планового бюджета» нет; поле projects.planned_budget заполняется итогом сметы и в интерфейсе не редактируется.
  • Факт — сам:
    • команда — часы из задач × себестоимость часа сотрудника (по мере записи и утверждения табеля);
    • поставщики — согласованные и оплаченные документы (раздел — по привязке);
    • перевозки и командировки — фактическая стоимость (как сейчас);
    • оборудование — субаренда и закупка документами поставщиков; своё — 0 (стоимость владения в проект не относим).
  • Вкладка «Смета и бюджет»: разделы — план, факт, отклонение, % исполнения; строки раскрываются; «перерасход» красным; «Динамика бюджета» — план против накопленного факта по неделям в реальном времени; выручка — выставлено, оплачено, к оплате.
  • Отклонение и маржа видны тем, у кого есть costs / earnings_margin.

7. Что удаляется или переделывается ​

  • Статьи бюджета как «план» — вместо них смета; project_cost_items остаётся журналом факта по разделам.
  • «Смета по ТЗ → применить в бюджет» — раздел «Команда» сметы.
  • Рисование документов кодом (fpdf) и заглушка HTML→PDF — шаблоны Word и Gotenberg.
  • Расчёт итогов оборудования во фронте — сервер.
  • Строка «Наценка» в документах клиента.

Данные переносятся: текущие плановые статьи и настройки бюджета — в смету v1 «согласована» (если по проекту выставлялись счета) или «черновик».


8. Этапы ​

ЭтапЧто получает сотрудникОценка
2. Документы работают ✅смета, счёт, акт, договор формируются и лежат в папках; номер по нашему юрлицу при выпуске; черновик счёта; менеджер выставляет счёт на аванс, остаток, свои строки; счёт компании без проекта — из карточки компании (сделано 2026-09-30, Система документов → Счёт по проекту); перевыпуск — отменить и выставить заново3–4 дня
3. Смета ✅модель, расчёт с налогами по юрлицу, скидки, скрытая наценка, экран по разделам, «Собрать смету» из проекта и разбора ТЗ, ставки сотрудников, перенос текущих данных6–8 дней
4. Ссылка клиенту ✅отправить смету ссылкой, клиент согласует или просит изменения, уведомление2–3 дня
5. Шаблоны Word ✅Gotenberg, шаблоны по видам и юрлицам, админка, поля, предпросмотр; DOCX и PDF каждого документа; предпросмотр офисных файлов (Шаблоны документов в Word)4–5 дней
6. Расходы ✅документы поставщиков с распознаванием, согласование, оплата по документу, частичные оплаты, факт по разделам (Документы поставщиков)4–5 дней
7. План и факт ✅план = смета, факт автоматически, раздел «План и факт» во вкладке «ТЗ и смета», «Что дальше» в карточке проекта (План и факт)3–4 дня

Порядок: этап 2 сразу чинит то, что сломано сейчас; этапы 3–4 — главное для менеджера; 5 меняет способ рисования документов, не их логику; 6–7 — для финансов. Каждый этап закрывается по Definition of Done из CLAUDE.md, сквозной сценарий раздела 5 дорожной карты дополняется шагами этого ТЗ.

Эксплуатация: при выкате удалять образы прошлых выкатов — диск staging заполнен на 78 % (каждый выкат — ~1,4 ГБ образов); Gotenberg — ~1,3 ГБ образ и ~400 МБ памяти.


8.1 Этап 3 — как делаем (по разбору кода 2026-09-30) ​

Что в коде не так, как предполагало ТЗ, и как это решено:

  • Потребность в оборудовании (project_equipment_requirements) не знает источника (свой склад, субаренда, закупка) и дат — только количество, дни аренды и цену проекта. Строка сметы из потребности — «своё»: себестоимость 0, цена = цена проекта или цена каталога за день (equipment.cost) × коэффициент длительности × кол-во. Субаренда и закупка берутся из позиций логистики проекта (logistic_operation_items, source_type rental/purchase) и становятся себестоимостью той же строки.
  • Командировки хранят одну плановую стоимость — строка сметы на командировку целиком (без разбивки на билеты, жильё и суточные).
  • Ставок у должностей нет — порядок ставок: проект (команда) → сотрудник (user_rates, история) → отдел. У отдела и в команде появляется вторая ставка — для клиента.
  • Часы в смете по ТЗ — по отделам, не по людям: строки раздела «Команда» из неё — по ставкам отдела; сотрудника с его личными ставками добавляют строкой «Сотрудник».
  • УСН хранится в настройках бюджета проекта; у реквизитов юрлица появляется свой процент УСН, смета берёт режим юрлица-продавца (переопределяется в смете).
  • Перевозки без операций логистики оценочной строкой не добавляются (нет тарифа) — строку добавляют вручную.

Порядок: модель и движок расчёта → API сметы и «Собрать смету» с разницей → ставки → перенос текущих данных (смета v1 из плановых статей) → документы берут строки и итоги из сметы → экран сметы.

9. Вопросы (ответы нужны до этапа указанного в скобках) ​

Ответы 2026-09-30: НДС зависит от нашего юрлица-продавца (его реквизиты); стандартного процента аванса нет; своих шаблонов Word пока нет; в документах — место для подписи, без картинок; своё оборудование сдаётся в аренду, его себестоимость неизвестна; кто подтверждает расход поставщика — решаем на этапе 6. Решено на этапе 6 (2026-10-01): подтверждает руководитель проекта, сверх плановой себестоимости раздела сметы (или вне сметы) — ещё финансы; смета — номинальный план до проекта, документы поставщиков её не меняют.

  1. Юрлица и режимы (этап 3): какие наши юрлица выставляют документы и на каком режиме каждое — общая система с НДС 22 % или УСН с каким % и НДС 5 / 7 %?
  2. Счёт на аванс (этап 2): стандартный процент аванса есть (например, 50 %)? Срок оплаты счёта по умолчанию?
  3. Договор (этап 5): есть ли ваш типовой договор в Word — возьмём его за основу шаблона? То же для сметы (КП), счёта и акта.
  4. Подпись и печать (этап 5): ставить картинками в документы или только место для подписи?
  5. Своё оборудование в факте (этап 7): считаем его себестоимость 0 или внутреннюю ставку (износ, амортизация)?
  6. Согласование расходов (этап 6): кто подтверждает расход поставщика — менеджер проекта, финансовый директор или оба; и от какой суммы?

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