Автоматизация документооборота в финтехе: от хаоса к порядку

Кейсы и разборы
Автоматизация документооборота в финтехе: от хаоса к порядку

TL;DR: Рассказываю про архитектуру AI-системы для автоматизации обработки финансовых документов. Разбираю выбор технологий, этапы внедрения и типовые проблемы при работе с документооборотом в финтехе.

Документооборот в финансовых компаниях — это всегда боль. Тонны бумаг, сканов, PDF-ок разного качества, которые нужно обрабатывать быстро и без ошибок. Недавно столкнулся с задачей автоматизации такого процесса, и хочу поделиться опытом — что работает, а что лучше не трогать.

Анализ существующего процесса

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

  • Входящие документы: справки о доходах, выписки, паспорта, договоры
  • Ручная обработка: сотрудники вбивают данные в CRM
  • Проверка: менеджер сверяет введённые данные
  • Архивирование: документы складываются в папки

Узким местом была именно ручная обработка — на один документ уходило 5-15 минут в зависимости от сложности.

Архитектура решения

Спроектировал систему из нескольких компонентов:

Модуль распознавания документов

# Примерная структура pipeline обработки
class DocumentProcessor:
    def __init__(self):
        self.ocr_engine = TesseractOCR()
        self.classifier = DocumentClassifier()
        self.extractors = {
            'passport': PassportExtractor(),
            'income_statement': IncomeExtractor(),
            'bank_statement': BankStatementExtractor()
        }
    
    def process_document(self, file_path):
        # 1. Предобработка изображения
        image = self.preprocess_image(file_path)
        
        # 2. OCR
        text = self.ocr_engine.extract_text(image)
        
        # 3. Классификация типа документа
        doc_type = self.classifier.classify(text, image)
        
        # 4. Извлечение структурированных данных
        extractor = self.extractors[doc_type]
        structured_data = extractor.extract(text, image)
        
        return structured_data

Компоненты системы

1. Preprocessing модуль

  • Нормализация качества сканов
  • Поворот и выравнивание страниц
  • Удаление шумов и артефактов

2. OCR-движок

  • Tesseract для базового распознавания
  • Специализированные модели для рукописного текста
  • Fallback на облачные API для сложных случаев

3. Классификатор документов

  • CNN для определения типа по изображению
  • NLP-модель для анализа текста
  • Правила для edge cases

4. Экстракторы данных

  • Регулярные выражения для стандартных полей
  • Named Entity Recognition для произвольного текста
  • Computer Vision для поиска печатей и подписей

Выбор технологий

OCR-решения

Тестировал несколько вариантов:

  • Tesseract 5.x — хорошо для качественных сканов
  • PaddleOCR — лучше справляется с рукописным текстом
  • Google Vision API — дорого, но очень точно
  • ABBYY SDK — отличное качество, высокая цена

Остановился на гибридном подходе: Tesseract для основной массы + облачный API для сложных документов.

ML-фреймворки

# Пример классификатора на PyTorch
import torch
import torch.nn as nn
from transformers import AutoModel, AutoTokenizer

class DocumentClassifier(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.bert = AutoModel.from_pretrained('DeepPavlov/rubert-base-cased')
        self.classifier = nn.Linear(768, num_classes)
        self.dropout = nn.Dropout(0.1)
    
    def forward(self, input_ids, attention_mask):
        outputs = self.bert(input_ids=input_ids, 
                          attention_mask=attention_mask)
        pooled = outputs.pooler_output
        return self.classifier(self.dropout(pooled))

Инфраструктура

  • FastAPI для REST API
  • Redis для кэширования результатов OCR
  • PostgreSQL для хранения метаданных
  • MinIO для файлового хранилища
  • Docker для контейнеризации

Этапы внедрения

Фаза 1: MVP для одного типа документов

Начал с паспортов — самый простой и структурированный формат. Это позволило:

  • Отладить pipeline обработки
  • Собрать feedback от пользователей
  • Замерить метрики качества

Фаза 2: Расширение на основные типы

Добавил справки о доходах и банковские выписки. Здесь уже понадобились более сложные алгоритмы извлечения данных.

Фаза 3: Интеграция с CRM

Настроил автоматическую передачу данных в существующую систему через API. Добавил интерфейс для ручной проверки спорных случаев.

Проблемы и решения

Качество входящих документов

Проблема: Сканы разного качества, фотографии с телефона, повёрнутые страницы.

Решение: Модуль предобработки с автоматическим улучшением качества:

def preprocess_image(self, image_path):
    image = cv2.imread(image_path)
    
    # Поворот по углу наклона текста
    angle = self.detect_skew_angle(image)
    if abs(angle) > 0.5:
        image = self.rotate_image(image, angle)
    
    # Улучшение контрастности
    image = cv2.convertScaleAbs(image, alpha=1.2, beta=10)
    
    # Удаление шумов
    image = cv2.medianBlur(image, 3)
    
    return image

Разнообразие форматов

Проблема: Один тип документа может выглядеть по-разному в зависимости от банка или организации.

Решение: Создал шаблоны для каждого варианта + fallback на универсальный экстрактор через NER.

Ложные срабатывания

Проблема: OCR иногда галлюцинирует цифры и буквы.

Решение:

  • Валидация извлечённых данных по бизнес-правилам
  • Confidence score для каждого поля
  • Ручная проверка для низких scores

Метрики и мониторинг

Настроил отслеживание ключевых показателей:

Технические метрики

  • Accuracy OCR: процент правильно распознанных символов
  • Document classification accuracy: точность определения типа документа
  • Field extraction precision: точность извлечения конкретных полей
  • Processing time: время обработки одного документа

Бизнес-метрики

  • Manual review rate: процент документов, требующих ручной проверки
  • Processing throughput: количество документов в час
  • Error rate: процент документов с ошибками извлечения
# Пример мониторинга
import logging
from prometheus_client import Counter, Histogram, Gauge

# Метрики Prometheus
documents_processed = Counter('documents_processed_total', 
                            'Total processed documents', 
                            ['document_type', 'status'])

processing_time = Histogram('document_processing_seconds',
                          'Time spent processing document')

confidence_score = Gauge('extraction_confidence_score',
                        'Confidence score of data extraction')

Результаты автоматизации

Система показала хорошие результаты по основным KPI:

  • Скорость обработки: среднее время сократилось с 10 минут до 30 секунд на документ
  • Точность извлечения: для структурированных документов (паспорта) — 98%+
  • Покрытие автоматизации: 85% документов обрабатываются без участия человека

Уроки и рекомендации

Что работает хорошо

  1. Гибридный подход к OCR — комбинация разных движков под разные задачи
  2. Поэтапное внедрение — начинать с простых документов, постепенно усложнять
  3. Human-in-the-loop — всегда оставлять возможность ручной проверки

Чего стоит избегать

  1. Переоценка качества OCR — даже лучшие решения дают ошибки на реальных данных
  2. Игнорирование edge cases — 10% сложных документов могут съесть 90% времени разработки
  3. Жёсткие правила извлечения — лучше использовать ML-подходы с обучением на данных

Дальнейшее развитие

Планирую развивать систему в нескольких направлениях:

Улучшение качества

  • Дообучение моделей на собранных данных
  • Добавление новых типов документов
  • Интеграция с внешними источниками для верификации

Масштабирование

  • Горизонтальное масштабирование обработки
  • Оптимизация для работы с большими объёмами
  • API для интеграции с другими системами

FAQ

Q: Какой ROI у такой автоматизации? A: Зависит от объёмов, но типично окупается за 6-12 месяцев. Основная экономия — на зарплате операторов и ускорении процессов.

Q: Насколько сложно интегрировать с существующими системами? A: Если есть API у CRM/ERP — несложно. Если только база данных — нужно писать адаптеры. Самое сложное — когда система legacy без документации.

Q: Что делать с персональными данными? A: Обязательно учитывать требования 152-ФЗ: шифрование при хранении, логирование доступа, право на удаление. Лучше сразу консультироваться с юристами.

Q: Можно ли использовать готовые SaaS-решения? A: Да, есть ABBYY FlexiCapture, Cognitive Technologies, зарубежные — но они дорогие и не всегда покрывают специфику бизнеса. Своё решение даёт больше контроля.

Q: Как оценить качество работы системы? A: Нужны метрики на разных уровнях: техническом (accuracy, precision, recall) и бизнесовом (время обработки, процент ручных проверок, количество ошибок в продакшене).

Нужна помощь с автоматизацией документооборота? Напишите мне — обсудим ваш проект.

Обсудить проект

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

Написать мне
Вернуться к блогу