Проблема: операторы вручную вбивают счета-фактуры в 1С, тратят часы, ошибаются. Решение: скрипт-парсер + OCR + нейросеть. Данные в 1С за 20 секунд.
📑 Что вы узнаете из этого материала:
Как устроен агент-парсер и почему это просто скрипт
Какую нейросеть выбрать для OCR и NLP
Как не платить за OCR, если PDF текстовый
Проверка DPI: почему 75 точек на дюйм — это красная зона
Метки доверия для оператора (зелёный/жёлтый/красный)
Подводные камни: кривые сканы, печати, защита от дурака
Безопасность: как не слить данные клиентов
Сколько это стоит и где брать готовые решения
🔍 Проблема: ручной ввод — это боль
В компанию приходит 30–50 счетов-фактур в день. Оператор:
Открывает письмо, скачивает PDF
Перепечатывает в 1С: номер, дату, сумму, ИНН, поставщика
Проверяет, не ошибся ли
Повторяет 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".
Тут два пути: облачные сервисы (дёшево для малых объёмов) или локальная нейросеть (дешевле при больших объёмах).
☁️ Облачные 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С
🔐 Безопасность: как не слить данные клиентов
🚨 Это важно! Счета-фактуры содержат:
ИНН, КПП, банковские реквизиты
Суммы договоров
Коммерческую тайну
Что делать (безопасный подход):
Локальное развертывание: весь софт (PaddleOCR + ruBERT) запускается внутри периметра компании. Данные не уходят в облако.
Облако только для OCR: если используешь Google Vision, отправлять только изображения, без контекста. Но лучше вообще не использовать публичные облака.
Шифрование: все файлы и база данных шифруются на диске.
Логирование: кто и когда подтвердил документ — оставляем аудит.
Разграничение доступа: оператор видит только свои задачи, администратор — все.
⚠️ Реальная история: одна компания использовала бесплатный онлайн-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 документов в месяц — дешевле нанять оператора
У вас нет техспециалиста для поддержки системы
Ваши документы сильно различаются по формату
📝 Чек-лист для внедрения (краткий план)
Оцените объём: сколько документов в день/месяц. Это определит бюджет.
Выберите подход: готовый сервис (быстро, дорого) или своя разработка (долго, дешевле).
Протестируйте OCR: возьмите 10–20 своих сканов и проверьте, какой OCR даёт лучший результат.
Настройте валидацию: обязательно проверяйте ИНН, даты, суммы.
Интеграция с 1С: сделайте REST API или файловый обмен.
Интерфейс оператора: простая веб-морда для подтверждения.
Запускайте пилот: 2 недели на реальных данных, поправляйте ошибки.
Масштабируйте: если пилот успешен — распространяйте на все документы.
💬 Вывод
Автоматизация входящих документов — это не магия, а просто хорошо настроенный конвейер из скриптов, нейросетей и человеческого контроля.
Главное — не бойтесь, что нейросеть будет ошибаться. Она будет. Но с правильной валидацией, метками доверия и проверкой DPI вы получите ускорение в 10–30 раз и снижение ошибок на 90%.
Окупаемость: если у вас 1000 документов в месяц и оператор тратит на них 2 рабочих дня — система окупится за 3–6 месяцев.
🔗 Полезные ссылки (бесплатные):
- PaddleOCR — нейросетевой OCR для локального развертывания
- GigaChat API — облачная NLP для извлечения данных
- ruBERT — русскоязычная модель для извлечения сущностей
- Python — всё пишем на нём
Комментарии
Пока нет комментариев. Будьте первым!