Перейти к содержимому

ИИ-генератор черновиков счетов

Внутренний инструмент для сотрудников, которые выставляют клиентам счета: бухгалтера по расчётам, менеджера проектов, финансового контролёра. Языковая модель собирает черновик счёта из уже существующих данных — табелей, договоров, этапов проекта, графиков регулярных платежей, — а человек проверяет его и отправляет.

Без такого сервиса на один счёт уходит полчаса ручного копирования строк из табелей и договоров в шаблон. Одну и ту же услугу каждый называет по-своему, поэтому выручку по услугам потом не разложить. Ставку налога и срок оплаты подставляют по памяти, а часы, уже вошедшие в прошлый счёт, иногда выставляются повторно. В итоге клиенты оспаривают счета, оплата задерживается, а при проверке налоговых ставок находятся ошибки.

  • Собирает черновик из источников. По клиенту и периоду сервис находит неоплаченные часы, этапы договора и регулярные начисления и превращает их в строки счёта со ссылкой на исходную запись.
  • Приводит описания к каталогу услуг. Формулировки строк сопоставляются со справочником услуг и тарифов, поэтому одна услуга везде называется одинаково.
  • Подставляет налог и условия оплаты. Ставка берётся из таблицы налоговых правил по стране клиента, срок оплаты — из договора; ручное изменение требует подтверждения.
  • Предупреждает о повторном выставлении. Перед созданием черновика сервис сверяет строки с историей счетов и показывает, с каким счётом совпадение.
  • Ведёт журнал генерации. По каждому запуску видно, сколько исходных записей использовано, какие правки внёс проверяющий и кто утвердил счёт.
  • Модель готовит черновик, решение за человеком. Каждый сгенерированный счёт попадает в статус «На проверке». Автоматической отправки клиенту нет: счёт уходит только после того, как сотрудник подтвердил строки и итог.
  • Интеграция с моделью — отдельный слой. Вызов LLM делают через HTTP-клиент Laravel или пакет, который выбрала команда (например, Prism). Модель получает только нужные для черновика поля, а ответ проходит проверку структуры до сохранения. Итоговые суммы и налоги считает приложение, а не модель.
  • Дубли ищут до генерации. Каждая строка ссылается на запись табеля или этап договора, и после утверждения эти записи помечаются как выставленные. Предупреждение о дубле не блокирует счёт, но сотрудник видит совпавший документ и принимает решение осознанно.
  • Налоговые ставки — данные, а не код. Правила хранятся в таблице по юрисдикциям с датами действия. Смена ставки — это новая строка в справочнике, а не выпуск новой версии приложения.
  • Правки сохраняются рядом с исходником. Черновик модели и итоговая версия после проверки хранятся отдельно. По расхождениям видно, где модель ошибается чаще всего и что стоит поправить в каталоге услуг.
  • Валюта задаётся на уровне клиента. Она переходит в счёт автоматически; смешивать валюты в одном документе не стоит.
  • Учётная система остаётся главной. Утверждённые счета выгружаются в бухгалтерию через API или файл. Если бухгалтерская программа уже умеет формировать счета из договоров по шаблону, модель может оказаться лишней: сначала стоит проверить штатные возможности.

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

Создай модели и миграции для генератора счетов: Client (страна, валюта,
срок оплаты по договору), ServiceCatalogItem (код, стандартное название,
ставка), TaxRule (страна, ставка, дата начала и окончания действия),
TimeEntry и ContractMilestone (сумма, дата, признак «выставлено», ссылка
на счёт), Invoice (статус: черновик, на проверке, утверждён, отправлен),
InvoiceLine (ссылка на исходную запись, позиция каталога, количество,
цена), GenerationRun (клиент, период, число исходных записей, исходный
ответ модели, проверяющий). Добавь фабрики с демо-данными.
Сделай сервисный класс, который собирает невыставленные записи клиента
за период, отправляет их языковой модели через HTTP-клиент Laravel
(провайдер и ключ — в конфиге) и просит вернуть строки в заданной
JSON-структуре с кодом позиции каталога. Проверь ответ на соответствие
структуре, сумму и налог посчитай в приложении по TaxRule, сохрани
результат как Invoice в статусе «на проверке» и запиши GenerationRun.

Проверьте, что при недоступности модели черновик не создаётся частично, а запуск отмечается ошибкой.

Сгенерируй Filament-ресурс для Invoice. В форме покажи строки с исходной
записью и позицией каталога, разрешай менять описание, количество и
цену. Рядом выведи исходный черновик модели. Добавь действие
«Утвердить» с обязательным подтверждением итога и налога; изменение
срока оплаты относительно договора требует отдельной отметки.
Перед сохранением черновика сверяй строки с утверждёнными счетами за
последние периоды по исходной записи, клиенту и сумме. При совпадении
покажи в карточке предупреждение со ссылкой на найденный счёт.
Предупреждение не блокирует утверждение, но решение и его автор
записываются в журнал.
Настрой роли: сотрудник расчётов создаёт и правит черновики, контролёр
утверждает, остальные только читают. Отправка клиенту доступна только
для утверждённых счетов и только по ручному действию. Добавь страницу
журнала GenerationRun и экспорт утверждённых счетов в CSV для загрузки
в бухгалтерию.

Попробуйте отправить счёт в статусе «на проверке» и убедитесь, что сервер отклоняет действие.