# GrantOps Automation

Публичная версия: [https://grantops-ildar.pages.dev](https://grantops-ildar.pages.dev)

Прототип системы для обработки входящих писем по грантовым и НИОКР-проектам.

## Откуда взялась задача

В 2017–2025 годах я работал с грантовыми заявками, НИОКР, патентной документацией и отчётностью. В таких проектах письма, сроки, замечания и документы часто распределены между почтой, таблицами и папками. На основе этого опыта я спроектировал прототип автоматизации входящей корреспонденции.

## Проблема

- срок ответа остаётся внутри письма и не превращается в задачу;
- номер заявки и проект приходится определять вручную;
- пакет документов выглядит готовым, хотя одного файла не хватает;
- разные версии одного документа лежат в почте и папках;
- повреждённое вложение может остаться незамеченным;
- чтобы восстановить историю решения, нужно собирать переписку из нескольких мест.

## Что делает прототип

`Почта → извлечение данных → проверка → задача → уведомление → подтверждение → журнал`

Система связывает письмо с проектом, извлекает дедлайн и необходимые действия, сверяет комплект документов и создаёт задачу ответственному. Если данных недостаточно или версии документов конфликтуют, письмо отправляется на ручную проверку.

## Моя роль

Я сформулировал задачу, описал сущности и статусы, спроектировал пользовательские сценарии и обработку ошибок, определил границы применения AI, собрал интерактивный интерфейс, workflow blueprint и документацию.

## Как устроен workflow

Входящее письмо приводится к единому формату. Список поддерживаемых вложений разбивается на отдельные элементы, из каждого файла извлекается текст, после чего все части объединяются с телом письма. Только затем выполняется один AI-вызов, который возвращает структурированные поля: компания, проект, номер заявки, категория, срок, необходимые документы, действия, риск, confidence, краткое резюме и черновик ответа.

Проверка отправляет событие в ручную очередь, если confidence ниже порога, отсутствует обязательное поле, вложение не читается либо обнаружен конфликт версий. После Lookup Project отдельный узел Project Found? проверяет результат поиска. Если проект не найден, создаются запись в ручной очереди, уведомление и запись в журнале.

Если проект найден, Merge Project Data + Original AI Payload объединяет запись проекта с исходным письмом и полным результатом извлечения. Поэтому к моменту Create Task & Event сохраняются summary, deadline, required actions, required documents, risk, confidence, исходное письмо и AI payload. Затем создаются событие проекта и задача ответственному. Процесс останавливается на узле Wait до подтверждения. После возобновления ветки `approved` и `rejected/manual review` завершаются записью в audit log.

## Пример обработки

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

## Сценарии ошибок

### Низкая уверенность

Письмо без номера заявки и понятного отправителя не меняет карточки проектов и направляется в ручную очередь.

### Повреждённое вложение

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

### Конфликт версий

Более старый файл не заменяет актуальный автоматически. Ответственному показываются обе версии и предлагается выбрать нужную.

## Статус проекта

- **Реальный опыт:** грантовые заявки, НИОКР, патентные материалы и отчётность.
- **В рамках портфолио:** постановка задачи, бизнес-логика, интерфейс, тестовые сценарии и workflow blueprint.
- **Синтетические данные:** компании, письма, номера заявок и внешние интеграции.

## Подготовка к внедрению

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