От 40 часов до 4: Как финтех-стартап автоматизировал отчетность по комплаенсу с помощью Go и ИИ за 3 месяца

Узкое место комплаенса, которое едва не потопило стартап

В начале 2026 года быстрорастущий финтех-стартап в ЕС столкнулся с экзистенциальной угрозой: регуляторная отчетность. С расширением операций на три новые юрисдикции команда комплаенса утопала в ручном извлечении данных, генерации отчетов и их подаче. Каждый месяц они тратили более 40 человеко-часов на юрисдикцию только для подготовки требуемых отчетов по ПОД/ФТ, транзакционной отчетности и достаточности капитала. Стоимость ошибок — штрафы и репутационный ущерб — была еще выше.

Технический директор, прагматичный инженер, понимал, что масштабирование команды — не ответ. Им требовалось техническое решение, способное автоматизировать весь конвейер: принимать необработанные данные транзакций, применять сложные регуляторные правила и генерировать готовые к подаче отчеты. Срок? Три месяца. Стек? Go для бэкенда, ИИ для интеллектуальной интерпретации правил.

Проблема: Ручные процессы комплаенса неустойчивы

Отчетность по комплаенсу в финтехе включает несколько болезненных этапов:

  1. Агрегация данных из нескольких баз данных, API и устаревших систем.
  2. Применение правил на основе специфических для юрисдикции нормативных актов (например, MiFID II, PSD2, местные законы о ПОД/ФТ).
  3. Генерация отчетов в обязательных форматах (XML, CSV, PDF).
  4. Валидация на соответствие бизнес-правилам и регуляторным схемам.
  5. Подача через государственные порталы или API.

Для этого стартапа каждый этап был ручным. Аналитик извлекал данные с помощью SQL-запросов, применял правила в Excel и вручную форматировал отчеты. Уровень ошибок составлял около 5%, а просрочки приводили к предупреждениям от регуляторов. Технический директор понял, что ручные процессы — это бомба замедленного действия.

Решение: Бэкенд на Go с механизмом правил на базе ИИ

Команда решила создать собственную платформу автоматизации комплаенса. Основные компоненты стека:

Компонент Технология Обоснование
Бэкенд Go Высокая конкурентность, быстрый запуск, отлично подходит для API-сервисов
RPC-коммуникация gRPC Типобезопасность, потоковая передача, низкая задержка для внутренних сервисов
Механизм ИИ-правил OpenAI API + кастомная ML-модель Интерпретация нормативных текстов, классификация транзакций
База данных PostgreSQL Сильная ACID-совместимость для финансовых данных
Мониторинг OpenTelemetry + pprof Наблюдаемость и профилирование в продакшене

Архитектура была чистой: Go API-шлюз, принимающий необработанные данные транзакций, gRPC-сервис для применения правил и микросервис ИИ, помогающий интерпретировать неоднозначные нормативные положения.

Почему Go?

Go был выбран за простоту и производительность. Команде нужно было обрабатывать тысячи конкурентных транзакций в секунду в часы пик. Горутины и каналы Go сделали конкурентную обработку естественной. Встроенные пакеты net/http и encoding/json сократили зависимости. Паттерны корректного завершения гарантировали, что незавершенные отчеты не будут потеряны при развертывании.

Интеграция ИИ через gRPC

Компонент ИИ не был черным ящиком-чатботом. Вместо этого команда построила gRPC-сервис с двумя конечными точками:

  • ClassifyTransaction: Использовал доработанную модель для выявления подозрительных транзакций на основе типологий ПОД/ФТ.
  • InterpretRegulation: По фрагменту нормативного текста возвращал структурированные правила (например, пороговые значения, отчетные события).

Связь между Go-сервисами и ИИ-сервисом осуществлялась через gRPC с protobuf, обеспечивая типобезопасность и поддержку потоковой передачи. Go-клиент использовал grpc-go с перехватчиками для логирования и метрик.

Пример кода: gRPC-клиент для классификации ИИ

package main

import (
    "context"
    "log"
    "time"

    pb "github.com/fintech/compliance/gen/go/ai/v1"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials/insecure"
)

func classifyTransaction(ctx context.Context, data []byte) (*pb.Classification, error) {
    conn, err := grpc.Dial("ai-service:50051",
        grpc.WithTransportCredentials(insecure.NewCredentials()),
        grpc.WithUnaryInterceptor(loggingInterceptor),
    )
    if err != nil {
        return nil, err
    }
    defer conn.Close()

    client := pb.NewAIServiceClient(conn)
    req := &pb.ClassifyRequest{
        Transaction: data,
        Context:     "AML_SUSPICIOUS_ACTIVITY",
    }
    return client.Classify(ctx, req)
}

func loggingInterceptor(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
    start := time.Now()
    err := invoker(ctx, method, req, reply, cc, opts...)
    log.Printf("gRPC call %s took %v, err: %v", method, time.Since(start), err)
    return err
}

Этот паттерн позволил команде добавить наблюдаемость с минимальными накладными расходами — критически важно для продакшен-системы комплаенса.

Продакшен-паттерны, которые обеспечили успех

Корректное завершение

В регулируемой среде потеря незавершенных отчетов недопустима. Go-сервис реализовал корректное завершение с помощью signal.NotifyContext:

ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()

srv := &http.Server{Addr: ":8080"}

go func() {
    <-ctx.Done()
    shutdownCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
    defer cancel()
    srv.Shutdown(shutdownCtx)
}()

Внедрение зависимостей

Чтобы сделать систему тестируемой, команда использовала внедрение через конструктор. Каждый сервис получал свои зависимости (база данных, ИИ-клиент, конфигурацию) явно. Табличные тесты покрывали граничные случаи, такие как сетевые тайм-ауты и некорректные данные.

Мониторинг с pprof и OpenTelemetry

Профилирование в продакшене с помощью net/http/pprof помогло выявить утечку памяти в модуле генерации отчетов в течение нескольких часов после развертывания. Трассировки OpenTelemetry обеспечивали сквозную видимость: от HTTP-запроса → gRPC-вызова → классификации ИИ → записи в базу данных.

Результаты: От 40 часов до 4 часов на юрисдикцию

После трех месяцев разработки и одного месяца параллельного тестирования система была запущена. Цифры говорили сами за себя:

Метрика До После
Время на ежемесячный отчет 40 часов 4 часа
Уровень ошибок 5% <0.1%
Просрочки 2 в квартал 0
Высвобожденная мощность аналитиков 0% 90%

Команда комплаенса перешла от рутинной ручной работы к обработке исключений и стратегии. Модель ИИ выявляла 97% подозрительных транзакций с уровнем ложных срабатываний ниже 2%.

Ключевые выводы для финтех-команд

  1. Go готов к продакшен-нагрузкам комплаенса. Его модель конкурентности и стандартная библиотека сокращают шаблонный код.
  2. gRPC + ИИ — мощная комбинация. gRPC обеспечивает типобезопасность и производительность; ИИ обрабатывает неструктурированную интерпретацию правил.
  3. Инвестируйте в наблюдаемость на раннем этапе. pprof и OpenTelemetry сэкономили недели отладки.
  4. Тестируйте с помощью табличных тестов. Финансовая логика имеет много граничных случаев — тестируйте их систематически.
  5. Корректное завершение — обязательное условие. В регулируемых системах целостность данных имеет первостепенное значение.

Заключение: Автоматизация — стратегическое преимущество

То, что начиналось как мера выживания, стало конкурентным отличием. Стартап не только автоматизировал комплаенс, но и получил возможность быстрее выходить на новые рынки — потому что адаптация системы к новой юрисдикции требовала только обновления правил, а не найма новых аналитиков.

Для основателей финтех-компаний и технических директоров, сталкивающихся с аналогичными проблемами, путь ясен: создайте бэкенд на Go с интеграцией ИИ через gRPC, инвестируйте в мониторинг и автоматизируйте безжалостно. Три месяца — реалистичный срок при наличии правильной экспертизы.

ASI Biont поддерживает подключение к OpenAI API через gRPC — подробнее на asibiont.com. Если вы создаете бэкенд на Go с ИИ, рассмотрите возможность использования этих паттернов для ускорения собственного пути автоматизации комплаенса.

← Все статьи

Комментарии