OCR pipeline n8n @
Этот воркфлоу полностью закрывает задачу извлечения данных из счетов и КП — от получения письма до записи в бухгалтерскую таблицу без участия человека.
Архитектура: два потока
Рабочий процесс делится на два пути от Has Attachment?:
- Верхний — обработка PDF-вложений (OCR-путь)
- Нижний — обработка тела письма без вложений
Верхний поток — OCR из PDF
1. Gmail Trigger
- Слушает входящие письма в Gmail
- Запускает весь workflow при получении нового письма
- Передаёт дальше metadata письма + вложения (если есть)
2. Has Attachment? (IF-нода)
- Условный роутер: проверяет, есть ли у письма вложение (PDF/изображение)
- Ветка
true→ OCR-пайплайн - Ветка
false→ парсинг тела письма
3. Upload Attachment to Drive
- Загружает PDF-вложение в Google Drive
- Нужно для стабильной передачи файла в следующий шаг через URI
- Операция:
upload: file
4. Download from Drive
- Скачивает только что загруженный файл обратно, получая прямую ссылку или бинарные данные
- Операция:
download: file— это может казаться избыточным, но обеспечивает совместимость формата для Mistral OCR
5. Extract Text (Mistral OCR)
- Ключевая нода — вызывает Mistral API для OCR
- Принимает PDF-файл, возвращает извлечённый текст
- Операция:
extractText: document— работает с таблицами, рукописным и печатным текстом в счетах/договорах
6. Prepare Extracted Content
- Нода
CodeилиSet— форматирует/нормализует текст от Mistral - Приводит к единому формату перед передачей в LLM
- Операция:
manual— ручная кастомная обработка
Нижний поток — тело письма
7. Prepare Email Body
- Нода
Set— извлекает и очищает текстовое содержимое письма (без вложений) - Объединяет оба потока: на выходе получается единый блок текста для классификации
Классификация транзакций
8. Classify Transaction... (AI Agent)
- Агент использует
Chat Model Memory+Output Parser - Получает подготовленный текст из счёта/договора/предложения
- Классифицирует документ: это приходная или расходная транзакция?
9. Gemini Model 1 + Transaction Parser
Gemini Model 1— LLM-бэкенд (Google Gemini) для агента классификацииTransaction Parser— структурированный Output Parser, принуждает LLM вернуть строго типизированный JSON (сумма, дата, контрагент, тип)
10. Google Gemini Chat Model (нижний)
- Второй Gemini-инстанс для ноды
Classify Chart of Account - Определяет счёт бухгалтерского учёта (Chart of Accounts) для каждой транзакции
Маршрутизация и запись в таблицы
11. Is Transactional?
- IF-нода: проверяет, является ли письмо вообще финансовым документом
- Отсекает нерелевантные письма
12. Get Chart of Accounts
- Читает Google Sheets со справочником счетов (
read: sheet) - Нужен как контекст для LLM при классификации по счетам
13. Aggregate Chart of Accounts
- Агрегирует справочник в один блок для передачи в промпт
- Операция: объединяет 25 записей в 1 элемент
14. Classify Chart of Account (AI Agent)
- Присваивает каждой транзакции конкретный бухгалтерский счёт из справочника
- Использует Gemini + Output Parser для структурированного ответа
15. Route by Revenue/Expense
- Switch-нода: делит транзакции на два потока
- Ветка
Revenue→ Prepare Revenue Data → Append to Revenue Sheet - Ветка
Expense→ Prepare Expense Data → Append to Expense Sheet
16–17. Prepare Revenue/Expense Data + Append to Revenue/Expense Sheet
Prepare *— нодаSet, формирует строку данных под формат Google SheetsAppend to * Sheet— дописывает строку в соответствующую таблицу (append: sheet)
Итоговый поток для PDF → бухгалтерия
Gmail Trigger
→ Has Attachment? [true]
→ Upload to Drive → Download from Drive
→ Mistral OCR (Extract Text)
→ Prepare Extracted Content
→ Classify Transaction (Gemini)
→ Is Transactional? [true]
→ Get Chart of Accounts → Aggregate
→ Classify Chart of Account (Gemini)
→ Route by Revenue/Expense
→ Prepare Data → Append to Google Sheet