↩️ Назад

Категории

Входящие счета-фактуры. Полная автоматизация с ИИ

02.07.2026 | Статья из категории: Нейросети

Проблема: операторы вручную вбивают счета-фактуры в 1С, тратят часы, ошибаются.
Решение: скрипт-парсер + OCR + нейросеть. Данные в 1С за 20 секунд.

📑 Что вы узнаете из этого материала:
  • Как устроен агент-парсер и почему это просто скрипт
  • Какую нейросеть выбрать для OCR и NLP
  • Как не платить за OCR, если PDF текстовый
  • Проверка DPI: почему 75 точек на дюйм — это красная зона
  • Метки доверия для оператора (зелёный/жёлтый/красный)
  • Подводные камни: кривые сканы, печати, защита от дурака
  • Безопасность: как не слить данные клиентов
  • Сколько это стоит и где брать готовые решения

🔍 Проблема: ручной ввод — это боль

В компанию приходит 30–50 счетов-фактур в день. Оператор:

⏱️ Итог: 10–15 минут на документ. 50 документов = 8–10 часов работы. Ошибки в ИНН или сумме → штрафы от налоговой, потерянные деньги.

🏗️ Архитектура: как всё работает (пошагово)

Никакой магии. Всё — как мы любим: скрипты, очереди, API. Нейросеть только там, где нужна.

📬 Почта (inbox@company.ru) — сюда приходят счета ↓ 🐍 Агент-парсер (Python-скрипт, висит на сервере 24/7) ↓ (обнаружил новое письмо с вложением) 📎 Скачивает PDF / JPG → сохраняет во временную папку / S3 ↓ 🔍 Детектор типа PDF: ├── ✅ Текстовый PDF → парсим напрямую (pdfplumber) └── 🖼️ Скан-PDF → запускаем OCR (PaddleOCR) ↓ 📐 Проверка DPI (если скан): ├── 🟢 300+ DPI — отличное качество ├── 🟡 150-300 DPI — среднее ├── 🟠 75-150 DPI — низкое (проверить обязательно) └── 🔴 < 75 DPI — отправить на перескан ↓ 🧠 NLP (GigaChat / ruBERT) — вытаскивает: дату, сумму, ИНН, номер ↓ ✅ Валидация: проверка ИНН по алгоритму, поиск дублей в 1С ↓ 🏷️ Метка доверия для оператора (источник + DPI) ↓ 💾 Интеграция с 1С (через REST API или COM-объект) ↓ 🖥️ Интерфейс оператора: показывает результат с меткой, оператор нажимает "Подтвердить"

🐍 Агент-парсер — это просто скрипт

Не пугайся слова "агент". Это просто программа, которая висит в памяти и проверяет почту. Никакой нейросети внутри нет — просто старый добрый парсер.

import imaplib import email import os import time import hashlib from email.policy import default IMAP_SERVER = "imap.yandex.ru" EMAIL = "inbox@company.ru" PASSWORD = "Ваш_пароль" def check_mail(): mail = imaplib.IMAP4_SSL(IMAP_SERVER) mail.login(EMAIL, PASSWORD) mail.select("INBOX") result, data = mail.search(None, "UNSEEN") if result != "OK": return for num in data[0].split(): result, msg_data = mail.fetch(num, "(RFC822)") msg = email.message_from_bytes(msg_data[0][1], policy=default) # Скачиваем вложения for part in msg.walk(): if part.get_content_maintype() == "multipart": continue filename = part.get_filename() if not filename: continue # Проверяем расширение ext = filename.split(".")[-1].lower() if ext not in ["pdf", "jpg", "jpeg", "png", "tiff"]: continue # Сохраняем с уникальным именем unique_name = f"{hashlib.md5(filename.encode()).hexdigest()}.{ext}" file_path = f"./downloads/{unique_name}" with open(file_path, "wb") as f: f.write(part.get_payload(decode=True)) # Сохраняем задачу в БД save_task_to_db(file_path, msg.get("From"), msg.get("Subject")) # Помечаем письмо прочитанным mail.store(num, "+FLAGS", "\\Seen") mail.close() mail.logout() # Бесконечный цикл if __name__ == "__main__": while True: check_mail() time.sleep(30) # Проверяем каждые 30 секунд
💡 Важный нюанс: чтобы скрипт работал как служба (не умирал при выходе), запускай через systemd (Linux) или как службу Windows (через NSSM). Если просто запустить в терминале — закроется, когда закроешь терминал.

📄 Текстовый PDF vs Скан: как не платить лишнего

Входящие документы бывают двух типов. И подход к ним — принципиально разный.

📄 Текстовый PDF

Создан в 1С, Word, Excel. Внутри есть слой с текстом.

  • Извлекаем текст через pdfplumber
  • Скорость: 0.5 секунды
  • Стоимость: бесплатно
  • Точность: 99.9%

🖼️ Скан (изображение)

Фото, факс, сканер. Текста внутри нет, только картинка.

  • Прогоняем через OCR (PaddleOCR / Google Vision)
  • Скорость: 5–10 секунд
  • Стоимость: от 0.5 руб/страница
  • Точность: 85–97%
💡 Лайфхак: 80% входящих счетов — текстовые PDF. Если вы будете прогонять их через OCR, вы переплатите в 10 раз и потратите лишнее время. Всегда сначала проверяйте, есть ли в PDF текст.
# Детектор типа PDF (всего 15 строк кода) def is_text_pdf(pdf_path): try: with pdfplumber.open(pdf_path) as pdf: for page in pdf.pages: text = page.extract_text() if text and len(text.strip()) > 50: return True except: pass return False

📐 Проверка качества скана: DPI имеет значение

Нейросеть может ошибаться, если скан сделан на телефон или прислан по факсу. Мы проверяем разрешение и ставим метку.

Разрешение Качество Риск ошибок OCR Метка
300+ DPI Идеальный скан < 2% 🟢 Высокое доверие
150–300 DPI Среднее качество 5–10% 🟡 Среднее, перепроверить
75–150 DPI Низкое качество 20–40% 🟠 Проверить обязательно
< 75 DPI Факс / мусор > 60% 🔴 Отправить на перескан
⚠️ Важно: если DPI ниже 75, мы автоматически отклоняем документ и отправляем уведомление контрагенту: "Пожалуйста, пришлите скан с разрешением не менее 300 DPI".
def check_image_dpi(pdf_path): """Проверяет разрешение первой страницы PDF""" import fitz doc = fitz.open(pdf_path) page = doc[0] rect = page.rect pix = page.get_pixmap(dpi=72) dpi_x = pix.width / (rect.width / 72) dpi_y = pix.height / (rect.height / 72) return round((dpi_x + dpi_y) / 2)

🧠 OCR: как превратить картинку в текст

Тут два пути: облачные сервисы (дёшево для малых объёмов) или локальная нейросеть (дешевле при больших объёмах).

☁️ Облачные OCR

  • Google Vision API — $1.5 / 1000 страниц
  • Yandex OCR (Vision) — ~1 руб / страница
  • Azure OCR — $1 / 1000 страниц
  • OCR.space — есть бесплатный тариф (250 запросов/мес)

Плюсы не нужно железо, стабильно

Минусы конфиденциальность, оплата за каждый документ

💻 Локальный OCR (нейросетевой)

  • PaddleOCR — бесплатно, отлично для русского
  • Tesseract 5 — бесплатно, но менее точный
  • EasyOCR — бесплатно, прост в установке

Плюсы данные не уходят, экономно при больших объёмах

Минусы нужен сервер с GPU (от 1500 руб/мес в аренду)

⚠️ Подводный камень: если в скане есть печать, перекрывающая текст (особенно гербовая), OCR может ошибаться. PaddleOCR справляется лучше, потому что обучен на документах с печатями.

🧠 NLP: как нейросеть вытаскивает данные

После OCR у нас есть просто текст. Теперь нужно вытащить структурированные данные.

📄 Текст после OCR: "СЧЕТ-ФАКТУРА № 452 от 15 марта 2026 г. ООО 'Ромашка' ИНН 7701123456 Сумма к оплате: 1 250 000 руб. НДС (20%): 250 000 руб." 🧠 Нейросеть (GigaChat / ruBERT) вытаскивает JSON: { "doc_number": "452", "doc_date": "2026-03-15", "supplier_name": "ООО Ромашка", "inn": "7701123456", "total_sum": 1250000, "nds": 250000 }
💡 Самый бюджетный способ: использовать GigaChat API для пилотного проекта (первые 1000 документов), а если проект выстрелит — обучить локальный ruBERT и сэкономить в будущем.

🏷️ Метки доверия: как оператор понимает, что проверять

Система автоматически ставит тег каждому документу. Оператор видит цвет и понимает, сколько внимания нужно уделить.

🟢 Текстовый PDF

100% доверия

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

🟡 Скан (OCR), 300+ DPI

95% доверия

Распознано через нейросеть с хорошим качеством. Бегло сверить сумму.

🟠 Скан (OCR), 75–150 DPI

60% доверия

Низкое качество. Требуется ручная проверка всех полей.

🔴 Скан (OCR), < 75 DPI

30% доверия

Факс или фото. Отправить на перескан или проверить вручную.


✅ Валидация: ловим ошибки ИИ

Нейросеть может ошибиться. Чтобы не записать в 1С левые данные, мы проверяем всё, что можно.

Проверка ИНН

def validate_inn(inn): if len(inn) == 10: coeffs = [2, 4, 10, 3, 5, 9, 4, 6, 8] control = sum(int(inn[i]) * coeffs[i] for i in range(9)) % 11 return control == int(inn[9]) or (control == 10 and int(inn[9]) == 0) elif len(inn) == 12: # проверка по двум контрольным суммам return True/False return False

Ключевой момент если ИНН не прошёл проверку — задача уходит оператору.

Проверка даты и суммы

  • Дата не должна быть в будущем
  • Сумма должна быть числом > 0
  • НДС = сумма × 20% (если не выделен отдельно)
  • Проверка дублей: нет ли такого же номера в 1С

🔐 Безопасность: как не слить данные клиентов

🚨 Это важно! Счета-фактуры содержат:
  • ИНН, КПП, банковские реквизиты
  • Суммы договоров
  • Коммерческую тайну

Что делать (безопасный подход):

  1. Локальное развертывание: весь софт (PaddleOCR + ruBERT) запускается внутри периметра компании. Данные не уходят в облако.
  2. Облако только для OCR: если используешь Google Vision, отправлять только изображения, без контекста. Но лучше вообще не использовать публичные облака.
  3. Шифрование: все файлы и база данных шифруются на диске.
  4. Логирование: кто и когда подтвердил документ — оставляем аудит.
  5. Разграничение доступа: оператор видит только свои задачи, администратор — все.
⚠️ Реальная история: одна компания использовала бесплатный онлайн-OCR, и через месяц их счета-фактуры были найдены в открытом доступе. Экономия 500 рублей обернулась миллионными штрафами.

💰 Сколько это стоит (реальный расчёт)

📦 Готовое решение (под ключ)

  • 1С:Документооборот + модуль ИИ — от 300 тыс. руб
  • СБИС (ЭДО + распознавание) — от 500 руб/мес + за документ
  • Интегратор "под ключ" — 500–800 тыс. руб

🛠️ Сделать самим (open-source)

  • Сервер с GPU — 15–20 тыс. руб/мес (аренда)
  • Разработка — бесплатно (код есть в статье)
  • Облачные API (1000 документов/мес) — 150–200 руб
  • Поддержка — 20–30 тыс. руб/мес (фрилансер)
💡 Для малого бизнеса (до 500 документов/мес): выгоднее взять готовый сервис (СБИС, Контур). Для крупного (5000+ документов) — выгоднее своя разработка на open-source.

📊 Калькулятор экономии (для начальника)

Показатель Ручной ввод Автоматизация
Время на 1 документ 10–15 минут 20 секунд
Документов в день 50 50
Время в день ~10 часов ~15 минут
Операторов 3 человека 1 человек (контроль)
Ошибки в месяц 15–20 1–2
Экономия в год ~1,5–2 млн руб

🚨 Подводные камни и неочевидные проблемы

📄 Кривой скан

Фото на телефон под углом, тени, блики. Решение: PaddleOCR — он обучен на таких данных.

🖨️ Нечитаемый PDF

Некоторые PDF — это не сканы, а текстовые документы. Тогда OCR не нужен.

📦 Письмо без вложения

Вдруг прислали просто текст. Наш агент должен это уметь обрабатывать или отклонять.

🧪 Защита от галлюцинаций

Нейросеть может придумать ИНН. Валидация по алгоритму отсекает 95% ошибок.

⚡ Нагрузка на почту

Если агент проверяет почту слишком часто (каждые 5 секунд), почтовый сервер может забанить. Оптимально: 30–60 секунд.

🔁 Дубликаты

Одно и то же письмо может быть доставлено дважды. Используем Message-ID, чтобы не обрабатывать повторно.


📋 Готовые сервисы (если не хотите писать код)

1. СБИС (ЭДО + ИИ)

Встроенное распознавание счетов-фактур, автоматическое заполнение.
Цена от 500 руб/мес + 5–10 руб за документ

2. Контур.Диадок

Электронный документооборот + AI-распознавание.
Цена от 1000 руб/мес

3. 1С:Документооборот 8 + модуль распознавания

Встроенный функционал для сканов и PDF.
Цена от 300 тыс. руб (лицензия)

4. ABBYY FlexiCapture (ABBYY Vantage)

Профессиональный корпоративный классификатор.
Цена от 1 млн руб


📌 Итог: стоит ли внедрять?

✅ Однозначно да, если:

  • У вас > 500 входящих документов в месяц
  • Вы тратите > 10 часов в месяц на ручной ввод
  • Ошибки в документах стоят вам денег (штрафы, пени)
  • Вы готовы инвестировать 300–500 тыс. руб на внедрение

🤔 Не стоит, если:

  • У вас < 100 документов в месяц — дешевле нанять оператора
  • У вас нет техспециалиста для поддержки системы
  • Ваши документы сильно различаются по формату

📝 Чек-лист для внедрения (краткий план)

  1. Оцените объём: сколько документов в день/месяц. Это определит бюджет.
  2. Выберите подход: готовый сервис (быстро, дорого) или своя разработка (долго, дешевле).
  3. Протестируйте OCR: возьмите 10–20 своих сканов и проверьте, какой OCR даёт лучший результат.
  4. Настройте валидацию: обязательно проверяйте ИНН, даты, суммы.
  5. Интеграция с 1С: сделайте REST API или файловый обмен.
  6. Интерфейс оператора: простая веб-морда для подтверждения.
  7. Запускайте пилот: 2 недели на реальных данных, поправляйте ошибки.
  8. Масштабируйте: если пилот успешен — распространяйте на все документы.

💬 Вывод

Автоматизация входящих документов — это не магия, а просто хорошо настроенный конвейер из скриптов, нейросетей и человеческого контроля.

Главное — не бойтесь, что нейросеть будет ошибаться. Она будет. Но с правильной валидацией, метками доверия и проверкой DPI вы получите ускорение в 10–30 раз и снижение ошибок на 90%.

Окупаемость: если у вас 1000 документов в месяц и оператор тратит на них 2 рабочих дня — система окупится за 3–6 месяцев.

🔗 Полезные ссылки (бесплатные):
- PaddleOCR — нейросетевой OCR для локального развертывания
- GigaChat API — облачная NLP для извлечения данных
- ruBERT — русскоязычная модель для извлечения сущностей
- Python — всё пишем на нём



Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога | 📡 Подписаться на RSS

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA