﻿---
title: Генератор коммерческих предложений
description: "Сервис на Laravel + Filament: сборка КП из каталога с актуальными ценами, согласование скидок, версии предложений и PDF для клиента."
---

## Что это за сервис

Инструмент для менеджеров, их руководителя и финансового отдела, который собирает коммерческое предложение из каталога товаров и услуг, проверяет скидки по правилам и выпускает PDF для клиента.

Без такого сервиса менеджер копирует цены из таблицы, обновлённой несколько недель назад, и отправляет клиенту неверные цифры. Скидки согласуются в личных сообщениях, и финансы не знают, кто и что одобрил. Сборка одного предложения занимает полчаса переключений между CRM, прайсом и шаблоном в текстовом редакторе. Версии хранятся в файлах вида «КП_v3_финал_исправл.pdf» на личных дисках, а скидки, съедающие маржу, обнаруживаются уже после подписания.

Первая версия — каталог с актуальными ценами, редактор позиций, версии и PDF по шаблону. Согласование скидок и напоминания о молчании клиента подключают сразу после, когда финансы утвердят пороги. Интеграцию со счетами и учётной системой делают отдельным шагом, если предложение должно автоматически превращаться в счёт.

## Что он делает

- **Собирает предложение из каталога.** Менеджер выбирает позиции, а цены подтягиваются из единого каталога, включая цены по объёму, сегменту клиента и сроку договора.
- **Контролирует скидки.** Скидка в пределах порога применяется сразу, выше порога — уходит на согласование руководителю с записью решения и времени.
- **Выпускает PDF.** Документ с фирменным оформлением, позициями, условиями и итогами формируется и отправляется без перехода в другую программу.
- **Хранит версии.** Каждая редакция сохраняется с номером, автором и временем и привязана к сделке; видно, какую версию клиент принял.
- **Напоминает о молчании клиента.** Если на отправленное предложение нет ответа несколько рабочих дней, менеджер получает напоминание.

## Нюансы и особенности

- **Цены — только из каталога.** В шаблон предложения значения не вписывают вручную. Изменение цены в каталоге действует на все новые предложения, а в уже отправленных сохраняется цена на момент выпуска.
- **Скидки без порога опасны.** Пороги согласования задают по проценту скидки и, если нужно, по марже. Например, до 10% — без согласования, выше — руководитель. Числа — пример, их утверждают финансы.
- **Версия — отдельная запись.** Правка отправленного предложения создаёт новую версию, а не перезаписывает старую. Иначе спор о том, что именно подписано, не решить.
- **Шаблон PDF продумывают сразу.** Реквизиты, условия, НДС и округления должны быть правильными до первого клиента, а не после первой жалобы. PDF формируется на сервере и сохраняется вместе с версией.
- **Отдельное хранение условий.** Сроки оплаты, поставки и гарантии хранятся как справочник типовых условий, чтобы юристы меняли их в одном месте.
- **Доступ по ролям.** Менеджер видит свои предложения, руководитель — отдел и очередь согласования скидок, финансы — все предложения и маржу. Себестоимость и маржа менеджеру могут быть скрыты на сервере.
- **Когда хватит готового продукта.** Если в CRM или учётной системе уже есть модуль КП с каталогом и согласованием, достаточно настроить его. Свой сервис нужен при сложных правилах ценообразования, собственном каталоге или нестандартном согласовании.

## Как сгенерировать через ИИ-агентов

Промпты рассчитаны на AI-агента (Claude Code, Cursor и аналоги) в Laravel-проекте с установленным **Filament 4.x**. Отправляйте их по одному и проверяйте результат каждого шага.

### 1. Каталог и модели

```text
Создай модели и миграции для генератора КП: Product (артикул, название,
единица, базовая цена, себестоимость, активность), PriceTier (товар,
тип: объём, сегмент, срок договора; условие, цена), Quote (сделка,
клиент, менеджер, статус, текущая версия), QuoteVersion (предложение,
номер, автор, время, итог, скидка, маржа, путь к PDF), QuoteLine
(версия, товар, количество, цена на момент выпуска, скидка),
DiscountApproval (версия, запрошенная скидка, решение, кто, когда,
комментарий), TermTemplate (название, текст). Добавь фабрики.
```

### 2. Редактор предложения

```text
Сгенерируй Filament-ресурс для Quote с редактором позиций: выбор товара
из каталога, автоматическая цена по PriceTier, количество, скидка по
позиции, итоги с НДС. Цены в позициях фиксируй на момент сохранения
версии. Сохранение отправленного предложения создаёт новую версию.
```

Проверьте, что изменение цены в каталоге не меняет уже отправленную версию.

### 3. Согласование скидок

```text
Добавь правило: если скидка по версии выше порога из конфига, отправить
её нельзя, пока руководитель не одобрит запрос. Сделай очередь согласования
для руководителя с действиями «Одобрить» и «Отклонить» и обязательным
комментарием при отказе. Записывай решение, автора и время.
```

### 4. PDF и напоминания

```text
Сделай генерацию PDF по версии на сервере в фоновой задаче: фирменный
шаблон, реквизиты, позиции, условия из TermTemplate и итоги. Сохраняй
файл вместе с версией. Добавь задачу по расписанию: если на отправленное
предложение нет ответа 5 рабочих дней, уведомить менеджера в панели.
```

### 5. Доступ и отчёты

```text
Настрой доступ: менеджер видит свои предложения без себестоимости
и маржи, руководитель — отдел и очередь скидок, финансы — всё. Добавь
виджеты средней скидки по менеджерам и доли принятых предложений
и отметку версии, которую принял клиент.
```

Войдите под менеджером и убедитесь, что маржа не видна ни в таблице, ни в выгрузке.

## Похожие сценарии

- [Дашборд воронки продаж](https://wpcraft.ru/kb/stacks/filament/use-cases/sales/pipeline-dashboard.md) — сделки, к которым привязаны предложения.
- [Управление лидами](https://wpcraft.ru/kb/stacks/filament/use-cases/sales/lead-management.md) — путь клиента до первого предложения.
- [Учёт счетов](https://wpcraft.ru/kb/stacks/filament/use-cases/finance/invoice-manager.md) — что происходит после принятия предложения.

## Материалы и источники

- [Refine: Quote Generator](https://refine.dev/use-cases/sales/quote-generator/)
- [Filament 4.x: формы](https://filamentphp.com/docs/4.x/forms/overview)
- [Filament 4.x: повторитель полей](https://filamentphp.com/docs/4.x/forms/repeater)
- [Filament 4.x: действия](https://filamentphp.com/docs/4.x/actions/overview)