Skip to content

Помощник в формах ​

Формы открываются заполненными, а частые дела делаются в одно-два действия: ТЗ «Пользоваться системой играючи». «Играючи» — значит легко, а не игра: достижений, очков и уровней нет. Мерило — сколько сотрудник набрал руками и сколько нажал.

План «ИИ повсеместно, но уместно» (05.10.2026): помощник в нужный момент (вставка текста, файл на форму), формы финансов и склада, команды словами из поиска, замер исправленных полей и отчёт руководству — разделы ниже. Миграции 0185 (form_fill_stats.edited_labels), 0186 (индексы ИНН для выписки банка).

Этап 2 (01.10.2026): «Из файла» (POST /ai/extract/form) и формы менеджера — проект, контактное лицо, командировка, заявка на логистику.

Реализовано (этап 1, 01.10.2026): модуль internal/modules/formassist, действие помощника form_fill (internal/modules/assistant/formfill.go), миграция 0179 (form_memory, form_fill_stats).

Как устроено ​

Одна механика на все формы. Во фронте форма описывает свои поля (useFormAssist) и ставит над собой строку AiFormAssist.

ЧастьЧто делает
«Из файла»Скрепка рядом с микрофоном: письмо, ТЗ, визитка, фото или скан (PDF, DOCX, XLSX, текст, изображения до 10 МБ) → те же поля. Слова в строке — уточнение к файлу. Фото и сканы читает модель, которая видит изображения
«Опишите словами»Фраза или диктовка (микрофон рядом) → POST /ai/actions/form_fill со схемой полей, справочниками формы и контекстом страницы → значения полей. Строки нет, если помощник выключен или выключена функция «Формы»
ПодсветкаПодставленное поле подсвечено и подписано «Заполнено помощником: откуда взял» или «Как в прошлый раз» — до первой правки человеком. «Отменить подстановку» возвращает поля, как были
Память вводовПоля с пометкой remember открываются значением с прошлого сохранения: задача в «Добавить часы», кто на связи в отсутствии, проект в новой задаче. Хранится на сервере — видно с любого устройства. Работает и без помощника
ЗамерПри сохранении форма пишет: полей всего, подставлено не руками, из них исправлено, время от открытия до сохранения, был ли помощник и память

Ничего не сохраняется само: форму сохраняет кнопка человека.

Проверка ответа модели ​

Сервер не доверяет модели. Из ответа остаются только поля схемы, и каждое приводится к своему типу:

  • выбор (select) — только value из присланных вариантов; модель ответила названием — оно сопоставляется с вариантом, иначе поле отбрасывается;
  • дата — ГГГГ-ММ-ДД; чтобы «в пятницу» превратилось в дату, модель получает календарь на ближайшие недели с днями недели;
  • часы — от 0 до 24 с шагом 0,25; деньги — неотрицательные, до копеек; число (number) может быть со знаком, например в корректировке часов;
  • текст обрезается до предела поля.

Поле-выбор без вариантов модели не отправляется. Тексты сотрудника и контекст — данные, а не указания модели.

Дата принимается и в виде «ДД.ММ.ГГГГ» — модель иногда пишет её по-русски.

Длинный справочник — без угадывания. Список больше 30 вариантов (сотрудники, проекты, компании) — справочник записей, а не перечень видов. Вариант из него сервер принимает, только если его название встречается в словах или тексте документа: хотя бы одно слово от 4 букв с запасом на окончание («Иванову» — «Иванов Пётр»). Так «рядом с Казань Экспо» не превращается в проект «ТехноЭкспо». Фронт по той же причине отправляет из длинных списков только упомянутые варианты (с файлом — упомянутые первыми, остальные до 300), и запрос остаётся коротким.

Слова и документ — целиком. Данные формы (поля, справочники, календарь) идут модели как «Данные из RMS», где каждая строка режется до 1500 символов, а весь блок — до 12 000 байт. Слова сотрудника и текст документа идут отдельным блоком после данных (actionPlan.material) — целиком, до 4000 символов слов и 30 000 символов документа. До 05.10.2026 они лежали в данных: длинный справочник вытеснял слова, а документ обрезался до 1500 символов. Секреты вырезаются из всего запроса на уровне провайдера (guardedProvider).

Формы этапа 1 ​

ФормаКлючПоляПамять
«Добавить часы» в табелеtime_entryзадача, дата, часы, комментарийзадача
«Добавить часы» в задачеtask_time_entryдата, часы, комментарий—
Отсутствиеabsenceвид, с, по, часть дня, кто на связи, комментарийкто на связи
Новая задачаtask_createназвание, проект, ответственный, срок, план часов, описаниепроект
Корректировка часовtimesheet_correctionдата, по дату, часы со знаком, причина; кнопка «Сформулировать» (correction_reason)—

Формы этапа 2 (менеджер) ​

ФормаКлючПоляИз файлаПамять
Новый проектproject_createназвание, клиент, вид, даты, монтаж, менеджер, контакт, площадка, бюджет, описаниеписьмо, ТЗ—
Новое контактное лицоcontact_createфамилия, имя, компания, должность, телефон, почта, комментарийвизитка, подпись письма—
Новая командировкаtrip_createкто, проект, откуда, куда, даты, транспорт, проживание, плановые расходы, цельписьмооткуда
Заявка на логистику проектаlogistics_requestназвание, откуда, куда, отгрузка, доставка, комментарий логистуТЗ, письмо площадкиоткуда

Компания по-прежнему заполняется «Реквизитами из файла» (карточка предприятия, договор, счёт) со сверкой с ЕГРЮЛ.

Комментарий к задаче: микрофон и кнопка помощника «черновик или дописать» (reply_draft по задаче).

Формы финансов и склада ​

ФормаКлючПоляИз файла
Новый платёжpayment_createнаправление, сумма, НДС, дата, способ, контрагент, назначение, проектсчёт, платёжка, акт
Обязательствоobligation_createназвание, направление, сумма, дата, число месяца (постоянный), контрагент, проект, ответственный, комментарийдоговор
Договорcontract_createномер, контрагент, предмет, сумма, даты подписания и действия, автопролонгация, заметкифайл договора
Оборудованиеequipment_createназвание, категория, серийный номер, количество, единица, цена, поставщик, заметкифото, накладная

Суммы и даты модель берёт из документа, а не считает; проверяет и сохраняет человек. Выписку банка разбирает код — см. Выписка банка.

Помощник в нужный момент ​

Строка «Опишите словами» слушает всю форму, в которой стоит:

  • Вставка текста. В любое поле вставили от 80 символов (или от трёх строк) — над формой «Вставили текст — разложить по полям?». Сами ничего не запускаем.
  • Файл на форму. Перетащили файл на форму, которая принимает файлы, — «Отпустите файл — помощник заполнит форму» и заполнение «Из файла». Своя зона загрузки формы (вложения задачи) обрабатывает файл сама — она отменяет действие по умолчанию раньше.

Карточки-выводы — только когда экономят время:

  • «Что я пропустил» в чате — от 10 непрочитанных на момент открытия чата.
  • «Кратко о задаче» — от 8 комментариев и сообщений чата задачи (discussion_count в GET /tasks/:id) или описание от 700 символов.
  • «Итоги проекта» (project_report) — вместо сводки, когда проект сдан или закрыт; с кнопкой «Скопировать».
  • «Письмо о долге» / «Напомнить об оплате» (invoice_reminder) — в просмотре выставленного неоплаченного счёта в «Продажах» и в документах проекта: тон «обычно / мягче / официальнее», «Скопировать», «Открыть в почте». Отправляет сотрудник сам.

Команды словами ​

В поиске ⌘K фраза о деле («отметь 3 часа монтаж на ТехноЭкспо», «поставь задачу…», «в отпуск с 16 по 20») даёт первой строкой «Сделать: …». Какую форму открыть, решает код по словам (src/components/ai/formCommands.ts, порядок — от частного к общему); раскладывает фразу по полям уже form_fill. Поиск кладёт фразу в очередь (queueFormCommand) и переходит на страницу формы с ?new=<ключ формы>; страница открывает форму (useOpenFormFromRoute), форма при открытии забирает фразу (takeFormCommand в useFormAssist.start) и заполняется, когда загрузятся обязательные справочники (не дольше 4 секунд). Команда показывается, только если раздел открыт по правам и включена функция «Формы».

Частые дела в одно-два действия ​

  • Кольцо дня в шапке ведёт в «Мои часы».
  • «Что сделать сегодня» — блок над главной любой роли:
    • неотмеченные часы — кнопка «В табель»;
    • заявки на отсутствие, ждущие моего решения, — «Согласовать»; больничные — «Принято»;
    • задачи с прошедшим сроком или сроком сегодня — «Начать» или переход к задаче.
  • Действия из уведомлений: заявка на отсутствие → «Согласовать»; больничный → «Принято»; сообщение или упоминание в чате → «Ответить» (поле с микрофоном прямо в колокольчике).
  • Отмена вместо подтверждения. Смена статуса задачи — в карточке и перетаскиванием на доске — делается сразу. Тост 10 секунд предлагает вернуть прежний статус. Подтверждение остаётся только для необратимого и денег.

Помощник — только про работу ​

Свободного чата нет. На вопросы не о работе в RMS помощник одной фразой вежливо отказывает и предлагает, чем помочь в системе (AI-помощник).

API ​

МетодПутьОписание
POST/api/v1/ai/extract/formmultipart: file, form (JSON схемы), text? → как form_fill
POST/api/v1/ai/actions/form_fill{text, form: {form, title, fields[], context?}} → {values, reasons}; функция forms
GET/api/v1/forms/:form/memoryЗначения формы с прошлого сохранения
PUT/api/v1/forms/:form/memory{values} — до 30 коротких значений: строки, числа, да/нет
POST/api/v1/forms/:form/statsЗамер сохранения, ответ 204
GET/api/v1/forms/stats?days=30Сводка по формам и top_edited; право ai.manage
GET/api/v1/forms/report?days=30Помощник по отделам и формам — руководству

Метрики ​

Замер хранит и подписи исправленных полей (edited_labels): сводка показывает до трёх полей, которые чаще всего исправляют. Форма от 5 сохранений с долей исправлений больше 20 % помечена «Нужна доводка» — подсказку в этих полях чинят или убирают.

Отчёт руководству (GET /forms/report, «Отчёты → Помощник в работе»): по основному отделу сотрудника — сотрудников, кто пользовался (обращения к помощнику или форма с ним), обращений, форм сохранено и с помощником, сэкономлено минут, три частые функции; по формам — медиана без помощника и с ним и экономия на заполнение (от 3 замеров с каждой стороны). Людей поимённо нет. Доступ — отчёты «все» по матрице, глобальный администратор или ai.manage; руководитель отдела (охват «свой») не видит.

Цели ТЗ: от 70 % полей заполнено не руками (auto_share), меньше 20 % подстановок исправлено (edit_share), время заполнения вдвое меньше (median_sec против median_ai_sec). Сводка — GET /forms/stats; первый замер — через неделю после выката этапа.

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