Гендок· демо к отклику← Демо сервисаТЗ и сметаСкачать PDF

Гендок — техническое задание на MVP

Развёрнутое ТЗ по краткому заданию заказчика: что именно будет сделано за 14 дней, как это устроено внутри и по каким признакам принимается каждый этап.

Версия: 0.1 от 06.10.2026Основание: «Гендок — краткое ТЗ» от 06.10.2026Исполнитель: z1nexДемо: z1nex.ru/gendoc
Документ написан до подписания NDA и до полного ТЗ, поэтому часть решений помечена как допущение. Список вопросов к заказчику — в разделе 17. После полного ТЗ эта версия уточняется и становится приложением к заказу.
  1. Цель и границы MVP
  2. Роли и сценарии
  3. Страницы и маршруты
  4. Модель данных
  5. Мастер документа
  6. ИИ-слой
  7. Шаблоны, DOCX и PDF
  8. Дела, сроки, напоминания
  9. Вход и аккаунт
  10. Оплата
  11. Админка
  12. Публичная часть и SEO
  13. Уведомления
  14. Инфраструктура
  15. Нефункциональные требования
  16. Этапы, приёмка, цена
  17. Риски и вопросы

1Цель и границы MVP

Гендок — веб-сервис для людей без юридической подготовки. Человек описывает ситуацию своими словами или выбирает её в каталоге, отвечает на 5–10 вопросов и получает готовый документ: претензию, заявление, жалобу или обращение. Дальше сервис ведёт «дело»: помнит дату отправки и контрольный срок, напоминает о нём и предлагает следующий документ, если ответа нет.

Результат MVP — работающий на сервере заказчика сервис, в котором весь этот путь проходится без участия разработчика, а ситуации, шаблоны, анкеты, промпты, модели и тарифы меняются из админки.

Входит

Не входит

Мобильные приложения, бот в MAX, проверка документа живым юристом, сложный визуальный редактор шаблонов. Архитектура не мешает добавить их позже: бот в MAX — ещё один канал уведомлений, проверка юристом — ещё один статус документа.

Допущения

2Роли и сценарии

РольЧто может
ГостьЧитает каталог и блог, проходит мастер до предпросмотра. Черновик привязан к сессии и переезжает в аккаунт после входа.
ПользовательСкачивает документы в пределах лимита или после оплаты, ведёт дела, получает напоминания, управляет подпиской, удаляет свои данные.
РедакторВ админке: ситуации, анкеты, шаблоны, промпты, SEO-поля, блог.
ПоддержкаВ админке: пользователи, дела, платежи, возвраты. Без доступа к настройкам.
ВладелецВсё, включая модели ИИ, тарифы, роли и журнал расходов.

Основной сценарий

  1. Человек пишет «магазин не возвращает деньги за сломанный пылесос» или открывает страницу ситуации из поиска.
  2. Сервис определяет ситуацию и документ, показывает, что понял, и даёт поправить выбор.
  3. Анкета на 5–10 вопросов. То, что удалось извлечь из текста, уже заполнено и подсвечено.
  4. Документ собирается: реквизиты и нормы — из шаблона, описание обстоятельств — от ИИ. Сервис проверяет обязательные реквизиты и показывает, чего не хватает.
  5. Предпросмотр, правка текста в браузере.
  6. Скачивание DOCX и PDF: бесплатно в пределах лимита или после оплаты.
  7. В кабинете появляется дело. Человек отмечает дату отправки, сервис считает контрольный срок.
  8. Напоминания приходят на почту и в Telegram. По кнопке «ответ не пришёл» сервис предлагает следующий документ и переносит в него уже известные данные.

3Страницы и маршруты

АдресНазначениеВ поиске
/Главная: поле «опишите ситуацию», популярные ситуации, как это работает, тарифыда
/situacii, /situacii/{категория}Каталог с категориямида
/situacii/{slug}Страница ситуации: когда подходит, что понадобится, срок ответа, образец, вопросы и ответы, кнопка «Составить»да
/blog, /blog/{slug}Заготовка блога: список и статьяда
/oferta, /politikaОферта и политика, текст правится в админкеда
/sozdat/{uuid}Мастер: анкета, сборка, предпросмотрнет
/vhodВход по коду из письма или через Telegramнет
/kabinet, /kabinet/dela/{id}Список дел и карточка деланет
/kabinet/tarifЛимиты, подписка, история платежейнет
/hooks/yookassa, /hooks/telegramВходящие уведомления платёжной системы и ботанет
/adminПанель Filamentнет
/sitemap.xml, /robots.txtСобираются автоматически по опубликованным страницам—

4Модель данных

PostgreSQL 16. У сущностей, общих для будущих сервисов, есть поле service_id: Гендок — первая запись в таблице сервисов.

ТаблицаЧто хранит
userse-mail, Telegram ID, ФИО, адрес, телефон, часовой пояс, каналы уведомлений, версия принятого согласия
login_codesХеш кода, срок жизни, число попыток
servicesСервисы на общем ядре
categories, situationsСитуация: название, slug, документ, адресат, срок ответа (дни, календарные или рабочие), следующий шаг, SEO-поля, статус публикации
questionsВопросы анкеты: ключ, тип, обязательность, подсказка, пример, условие показа, признак персональных данных, порядок
templatesФайл DOCX, версия, список найденных переменных и блоков, правила проверки реквизитов
promptsЗадача, версия, текст, параметры модели, JSON-схема ответа
ai_providersДрайвер, модель, приоритет, включён/выключен, таймаут, цена токенов, лимит расхода в день
ai_requestsЖурнал: задача, провайдер, попытка, статус, время, токены, стоимость, версия промпта, обезличенные запрос и ответ
casesДело: пользователь, ситуация, статус, дата отправки, контрольный срок, исход
documentsДокумент дела: ответы анкеты, блоки текста, версия шаблона, пути к DOCX и PDF, признак «текст без ИИ»
case_eventsИстория дела: что и когда произошло
reminders, notificationsЗапланированные напоминания и журнал отправок по каналам со статусом доставки
tariffs, payments, subscriptions, entitlementsТарифы, платежи ЮKassa, подписки, остаток доступных скачиваний
holidaysПроизводственный календарь для расчёта рабочих дней
posts, pagesБлог и служебные страницы

5Мастер документа

Состояния

черновик → ситуация определена → анкета → сборка → готов → скачан. Каждое состояние сохраняется: вкладку можно закрыть и вернуться по ссылке или из кабинета.

Анкета

Проверка реквизитов

У шаблона есть список обязательных переменных и правила. Перед скачиванием сервис показывает список: что заполнено, чего нет. Незаполненные места в предпросмотре выделены. Документ с пропусками скачать можно, но только после явного подтверждения.

Правка в браузере

Документ хранится как набор блоков: шапка, заголовок, абзацы, требования, подпись. Реквизиты меняются через анкету, текст абзацев — прямо в предпросмотре. Правки сохраняются как блоки, поэтому DOCX и PDF всегда собираются из актуального текста, а не из HTML. Кнопка «Собрать заново» возвращает текст модели.

Сборка без блокировки

Обращение к ИИ и сборка файлов идут в очереди. Страница опрашивает статус раз в секунду и показывает, что происходит: «определяем ситуацию», «пишем текст», «собираем файл». Запросы пользователей не занимают PHP-процессы на время ответа нейросети.

6ИИ-слой

Единый интерфейс

interface LlmDriver {
    public function complete(LlmRequest $request): LlmResponse;
}
// YandexGptDriver, GigaChatDriver, OpenAiCompatibleDriver

Резерв подключается через OpenAiCompatibleDriver: адрес, ключ и название модели задаются в админке, поэтому смена резервного провайдера не требует правки кода. Особенности провайдеров спрятаны в драйверах: у GigaChat токен доступа живёт 30 минут и кешируется в Redis, в контейнер ставятся сертификаты Минцифры; у YandexGPT — ключ сервисного аккаунта и идентификатор каталога.

Задачи

ЗадачаНа входеНа выходе (JSON по схеме)
Определение ситуацииТекст пользователя, список ситуацийslug ситуации, уверенность, извлечённые поля анкеты
Текст обстоятельствОбезличенные ответы анкеты1–3 абзаца фактов для документа
Следующий шагДело, исход, историяРекомендация и следующий документ из разрешённого списка
Нормы права, сроки и требования всегда берутся из шаблона. Модель пишет только описание обстоятельств, поэтому придуманная статья закона в документ попасть не может.

Цепочка и автопереключение

  1. Задача берёт из админки список включённых моделей по приоритету.
  2. Модель, у которой сработал предохранитель, пропускается.
  3. Запрос уходит с таймаутом 20 секунд (5 секунд на соединение).
  4. Ошибка 5xx, 429 или обрыв сети — один повтор через 1–2 секунды. Таймаут — без повтора, сразу следующая модель.
  5. Ответ проверяется по JSON-схеме. Не прошёл — один повторный запрос с просьбой исправить формат, затем следующая модель.
  6. Три сбоя модели за 5 минут — предохранитель выключает её на 5 минут, потом пропускает один пробный запрос.
  7. Каждая попытка пишется в журнал: модель, статус, время, токены, стоимость.
  8. Общий бюджет на запрос пользователя — 45 секунд. Если не ответила ни одна модель:
    • определение ситуации — поиск по ключевым словам и каталог;
    • текст обстоятельств — документ собирается по шаблону с перечислением ответов анкеты, задача возвращается в очередь с паузами 1, 5 и 15 минут, улучшенный текст приходит пользователю уведомлением.

Таймаут, число повторов и порог предохранителя — настройки, а не константы в коде.

Журнал и расходы

Защита

7Шаблоны, DOCX и PDF

8Дела, сроки, напоминания

Статусы дела

документ готов → отправлено, ждём ответа → срок истёк → ответ получен (удовлетворено / отказ / частично) → закрыто. Из «срок истёк» и «отказ» доступен переход к следующему документу.

Контрольный срок

У ситуации задано число дней и способ счёта — календарные или рабочие. Срок считается от даты отправки, которую отмечает пользователь. Рабочие дни считаются по производственному календарю из таблицы holidays; календарь обновляется раз в год и правится в админке.

Напоминания

Следующий шаг

У ситуации в админке задаются следующие документы и условие: нет ответа или отказ. Новый документ создаётся в том же деле, получает ответы предыдущей анкеты, дату первой претензии и задаёт только недостающие вопросы.

9Вход и аккаунт

10Оплата

Автоплатежи в ЮKassa включаются по заявке магазина, это занимает несколько дней. На тестовом магазине подписка проверяется сразу, в боевом включается после одобрения.

11Админка

Одна панель Filament на все будущие сервисы. Общее ядро — пользователи, роли, платежи, ИИ-слой, уведомления, журнал — отделено от модуля «Гендок». Новый сервис добавляет свой модуль и группу в меню, а не вторую админку.

РазделЧто делает
Ситуации и категорииНазвание, документ, адресат, срок ответа, следующий шаг, публикация, SEO-поля
АнкетыВопросы ситуации: тип, обязательность, подсказка, пример, условие показа; порядок перетаскиванием; предпросмотр анкеты
ШаблоныЗагрузка DOCX, версии, сверка переменных, пробная сборка на тестовых ответах
ПромптыТекст, версия, параметры, пробный запуск; откат на прошлую версию
Модели ИИПровайдеры, ключи, приоритет, включение, таймаут, цена токенов, дневной лимит, кнопка «проверить»
Журнал ИИВсе запросы с цепочкой попыток, фильтры, расход
ТарифыЛимиты и цены
ПользователиПрофиль, дела, платежи, блокировка, выдача доступа вручную
ДелаСписок с фильтрами по статусу и сроку, история, документы
ПлатежиСтатусы, возвраты, подписки
Блог и страницыСтатьи, оферта, политика
НастройкиТексты уведомлений, производственный календарь, счётчик Метрики

Роли: владелец, редактор, поддержка. Вход в админку — с двухфакторной проверкой. Изменения ситуаций, шаблонов, промптов и тарифов пишутся в журнал действий: кто, что и когда поменял.

12Публичная часть и SEO

13Уведомления

14Инфраструктура

nginx       раздача статики, HTTPS
app         PHP 8.3-FPM, Laravel 12
horizon     очереди: ai, docs, notify, default
scheduler   напоминания, сверка платежей, продление подписок
postgres    PostgreSQL 16
redis       очереди, кеш, предохранители моделей
gotenberg   DOCX → PDF

15Нефункциональные требования

ОбластьТребование
СкоростьПубличная страница — ответ сервера до 300 мс из кеша. Документ при работающей основной модели — до 30 секунд от отправки анкеты.
Нагрузка50 одновременных сборок проходят через очередь без ошибок; число обработчиков настраивается.
БезопасностьПользователь видит только свои дела и файлы; защита форм от подделки запросов; ограничение частоты на вход, сборку и оплату; подписанные ссылки на файлы; шифрование чувствительных полей в базе.
152-ФЗДанные хранятся в России; согласие и политика; удаление по запросу; в логах и в запросах к ИИ персональных данных нет. Уведомление Роскомнадзора подаёт заказчик как оператор.
КодPSR-12, автоформатирование, статический анализ, миграции и сиды с демо-данными, ежедневные коммиты в репозиторий заказчика, README с запуском, деплоем и восстановлением.
ТестыАвтотесты на то, что дорого ломать: цепочка моделей и предохранитель, сборка шаблона с условными блоками, расчёт срока в рабочих днях, обработка уведомлений ЮKassa, списание лимита.
БраузерыДве последние версии Chrome, Яндекс Браузера, Safari и Firefox, включая мобильные.

16Этапы, приёмка, цена

Каждый этап принимается на тестовом сервере по списку ниже и оплачивается через безопасную сделку Kwork.

ЭтапЧто сдаётсяКак проверитьЦена
1. Каркас
дни 1–3
Репозиторий, Docker Compose, тестовый сервер, деплой. Вход по коду. Админка: категории, ситуации, анкеты, SEO-поля. Главная, каталог, страница ситуации, оферта, политика, sitemap.Ситуация, созданная в админке, появляется в каталоге со своими SEO-полями. Вход по коду из письма работает. Проект поднимается по README одной командой.24 000 ₽
2. Ядро
дни 4–8
Мастер. ИИ-слой с тремя драйверами, автопереключение, журнал, расходы, промпты в админке. Шаблоны DOCX, PDF, проверка реквизитов, правка в браузере.Три ситуации проходят путь от текста до DOCX и PDF. При выключенной основной модели документ собирается, в журнале видно переключение и стоимость. При выключенных всех — документ собирается по шаблону.42 000 ₽
3. Кабинет
дни 9–12
Дела, сроки, напоминания по e-mail и в Telegram, вход через Telegram, следующий документ. ЮKassa: разовая покупка, подписка, лимиты.Тестовый платёж открывает скачивание, повторное уведомление не начисляет дважды. Напоминание приходит в оба канала. «Ответ не пришёл» предлагает следующий документ с перенесёнными данными.36 000 ₽
4. Сдача
дни 13–14
Заготовка блога, Метрика с целями, бэкапы, перенос на боевое окружение, README, исправления по итогам приёмки.Боевой сайт работает. Бэкап восстановлен на тестовом окружении. Цели видны в Метрике.18 000 ₽
Итого14 дней, затем 30 дней бесплатных исправлений120 000 ₽

Что нужно от заказчика

К началу этапаЧто
1Доступ к репозиторию и серверу, домен, почтовый сервис. Список ситуаций на старт.
2Ключи YandexGPT и GigaChat, данные резервного провайдера. Шаблоны и анкеты минимум для трёх ситуаций.
3Тестовый магазин ЮKassa, токен Telegram-бота, тарифы и лимиты.
4Счётчик Метрики, хранилище для бэкапов, тексты оферты и политики, остальные шаблоны.

17Риски и вопросы

РискЧто с ним делаем
Плотный срок — 14 днейМатериалы и доступы приходят к началу этапа по таблице выше. Задержка материалов сдвигает срок этапа на столько же дней.
Одобрение автоплатежей в ЮKassaПодписка сдаётся на тестовом магазине, в боевом включается после одобрения.
PDF отличается от DOCXОба файла из одного шаблона, шрифты установлены в контейнер, пробная сборка в админке показывает результат до публикации шаблона.
Ошибки нейросетиНормы и требования только из шаблона, ответ проверяется по схеме, пользователь видит и правит текст до скачивания.
Все модели недоступныСервис продолжает выдавать документы по шаблону, запрос доделывается из очереди.
Юридическая точность шаблоновТексты готовит и утверждает заказчик; сервис отвечает за точную подстановку.

Вопросы к заказчику

  1. Сколько ситуаций должно быть на запуске и готовы ли для них шаблоны и анкеты?
  2. Какой провайдер будет резервным? Если он за пределами России — подтвердите, что ему можно отправлять обезличенный текст.
  3. Что именно платно: скачивание, сборка или количество дел? Какой бесплатный лимит?
  4. Есть ли юрлицо или ИП с подключённой ЮKassa, какая система налогообложения для чеков?
  5. Нужна ли подписка с автосписанием через СБП или достаточно карт?
  6. Есть ли макеты или фирменный стиль? Если нет — делаю в духе демо.
  7. Где живёт репозиторий и нужен ли автоматический деплой по коммиту?
  8. Какие характеристики у сервера и будет ли на нём что-то ещё?
  9. Сколько хранить документы и дела после закрытия?
  10. Какие сервисы появятся на общей админке следующими — чтобы заранее разделить ядро правильно.
Демо, которое показывает описанное поведение: z1nex.ru/gendoc. В демо модели ИИ имитируются, рабочая версия строится на стеке из задания.