OCR pipeline n8n @

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 Sheets
  • Append 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



Report Page