Как я это сделаю
План рабочей версии на стеке из ТЗ: Laravel 12, Filament, PostgreSQL 16, Redis и Horizon, PhpWord и Gotenberg. Демо в соседних вкладках показывает поведение, здесь — из чего оно будет собрано.
Из чего состоит сервис
Нажмите на блок, чтобы прочитать, что он делает.
Сайт и мастер документа Blade · чистый JS · SCSS по БЭМ
Главная, каталог, страницы ситуаций, мастер, кабинет. Страницы отдаёт сервер, поэтому каталог индексируется поисковиками. JS только там, где он нужен: анкета, правка документа, опрос статуса генерации.
▼
Laravel 12 ядро + модуль «Гендок»
Ядро (пользователи, оплаты, ИИ-слой, уведомления, админка) отделено от модуля сервиса (ситуации, анкеты, шаблоны, дела). Следующий сервис заказчика добавляется как ещё один модуль на том же ядре и в той же админке.
▼
Redis + Horizon очереди ai · docs · notify
Запросы к ИИ, сборка файлов и рассылка идут через очереди. Страница не ждёт ответа модели 20 секунд, а опрашивает статус задачи: если основная модель молчит, сайт не зависает и не теряет других посетителей.
▼
ИИ-слой единый интерфейс драйверов
Один контракт AiDriver и менеджер цепочки. Порядок моделей, таймауты, число повторов и цены токенов лежат в базе и правятся в админке. Каждая попытка пишется в журнал: модель, время, токены, стоимость, причина сбоя.
Документы PhpWord → Gotenberg
Шаблон — обычный DOCX с переменными и условными блоками, его готовит юрист в Word и загружает в админку. PhpWord подставляет данные, Gotenberg (LibreOffice в Docker) делает PDF из того же файла, поэтому PDF совпадает с DOCX до строки.
YandexGPT основная
Первая в цепочке. Ключи на аккаунте заказчика, данные обрабатываются в РФ.
GigaChat вторая
Подключается, если первая не ответила за 20 секунд или вернула ошибку. Токен доступа обновляется по расписанию.
Резерв OpenAI-совместимый API
Третья линия. Один драйвер на любой сервис с совместимым API: адрес и ключ задаются в админке.
▼
PostgreSQL 16 данные в РФ
Ситуации, анкеты, версии шаблонов и промптов, дела, документы, события, платежи, журнал ИИ. Ответы анкеты с персональными данными шифруются на уровне полей.
Scheduler сроки и напоминания
Раз в 10 минут ищет дела, у которых подошёл контрольный срок, и ставит письма и сообщения в очередь. Рабочие дни считаются по производственному календарю.
▼
E-mail код входа · напоминания
Вход по коду из письма, напоминания о сроке, ссылка на следующий шаг.
Telegram-бот вход · напоминания
Вход через бота и кнопки «Ответ пришёл» / «Не пришёл» прямо в сообщении.
ЮKassa карта · СБП
Разовая покупка и подписка. Вебхук обрабатывается один раз по ключу идемпотентности: повторное уведомление не выдаст документ дважды и не продлит подписку лишний раз.
▲
Админка на Filament общая для будущих сервисов
Ситуации, анкеты, шаблоны, промпты, модели ИИ, тарифы, пользователи, дела, журнал запросов, SEO-поля. У шаблонов и промптов есть версии: можно откатиться, а в каждом документе записано, какой версией он собран.
Путь одного документа
Текст ситуацииЗадача уходит в очередь, страница показывает ход
0,1 с
Тип ситуации и фактыОдин запрос к ИИ, ответ строго по JSON-схеме: ситуация, уверенность, найденные суммы и даты
1–3 с
Анкета из 5–10 вопросовНайденное в тексте уже подставлено, человек проверяет и дополняет
1–2 мин
Текст обстоятельствИИ пишет только описательную часть. ФИО, адреса и телефоны в модель не уходят: их подставляет шаблон
2–5 с
Сборка DOCX и проверка реквизитовPhpWord, условные блоки, список незаполненного
0,2 с
PDFGotenberg из того же DOCX
1–2 с
Дело и контрольный срокНапоминания встают в расписание, следующий шаг известен заранее
сразу
Если основная модель не ответила
| нет ответа 20 с | Запрос обрывается, та же задача сразу уходит следующей модели по приоритету. Повторять на той же модели нет смысла: человек уже ждал. |
| ошибка 5xx / 429 | Один быстрый повтор через 1–2 секунды, затем следующая модель. |
| ответ не по схеме | Ответ проверяется по JSON-схеме. Один повтор с просьбой исправить формат, затем следующая модель. |
| предохранитель | Три сбоя подряд — модель на 5 минут исключается из цепочки, чтобы каждый посетитель не терял на ней по 20 секунд. Потом пробный запрос. |
| не ответил никто | Ситуацию человек выбирает из каталога, документ собирается по шаблону без текста ИИ. Задача остаётся в очереди, улучшенный текст придёт на почту. |
| журнал | Каждая попытка — строка: модель, номер попытки, время, токены, стоимость, ошибка. Расход виден по дням, моделям и задачам. |
Это можно проверить прямо здесь: включите «Сломать основную модель ИИ» вверху и соберите документ, потом откройте «Админка → Журнал ИИ».
Данные и деньги
| situations | Ситуация, тип документа, контрольный срок, следующий шаг, SEO-поля, адрес страницы. |
| questions | Вопросы анкеты: тип, обязательность, признак «персональные данные», условие показа. |
| templates · versions | DOCX-шаблоны с версиями. Документ помнит, какой версией собран. |
| prompts · versions | Промпты и схемы ответов, тоже с версиями и откатом. |
| cases · documents · events | Дело, его документы и лента событий: создано, отправлено, срок, ответ, следующий шаг. |
| ai_providers · ai_requests | Цепочка моделей и журнал каждой попытки со стоимостью. |
| payments · subscriptions | Платёж с ключом идемпотентности, подписка, бесплатные лимиты. |
Что заложено на годы
- Ядро и модуль сервиса разделены: следующий сервис не требует переписывать оплату, ИИ-слой, уведомления и админку.
- Каналы уведомлений и провайдеры ИИ — драйверы за интерфейсом. MAX или новая модель добавляются одним классом.
- Проверка юристом ложится в ту же ленту событий дела как ещё один статус документа.
- Персональные данные хранятся в РФ, в модели не передаются, удаляются по запросу пользователя.
- Тесты на то, что дороже всего ломать: цепочка ИИ, сборка документов, вебхуки оплаты, расчёт сроков.
- Docker Compose, ежедневные бэкапы базы и файлов с проверкой восстановления, README по развёртыванию.
Этапы и цена
1. Каркас: сервер, база, базовая админка, вход по кодудни 1–324 000 ₽
2. Ядро: ИИ-слой с резервом, мастер, DOCX и PDFдни 4–842 000 ₽
3. Кабинет: дела и сроки, e-mail и Telegram, ЮKassaдни 9–1236 000 ₽
4. Сдача: SEO-страницы, тесты, исправления, документациядни 13–1418 000 ₽
Итого 120 000 ₽ за 14 дней. Подробности по каждому этапу и критерии приёмки — в разделе «ТЗ и смета».