Метод (Event Handler) ProcessReceiptImage

Домен: AID | Сервис: image-processor | Тип: Kafka Consumer

Author

Application & Simulation Services Framework Documentation

Published

June 11, 2026

WarningОграничение публичной документации

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

  • Полная спецификация метода: Будет доступна только во внутреннем контуре разработки (Confluence / Swagger Enterprise).

Функциональное назначение

The asynchronous event handler ProcessReceiptImage is deployed within the image-processor microservice. It acts as a core Receipt Text Context Provider (OCR Context Provider), responsible for pulling task events from Kafka, streaming down paper receipt photos from MinIO object storage, running localized character segmentation, and performing line-by-line text reading.

The method transforms graphical pixels into a structured text dataset. To maintain structural consistency and reuse core perimeter policies, the extracted text is seamlessly pushed into the unified text processing pipeline, triggering the existing censorship-control-worker.

Core Tasks Handled by the Method

  1. Binary Asset Ingestion: Downloads the paper receipt snapshot from the S3 bucket into local execution memory layers via an internal asynchronous Boto3 pipeline.
  2. Optical Character Recognition (OCR Inference): Processes the image matrix using hardware acceleration (GPU/CPU) to segment lines, normalize string layout, and extract text characters.
  3. Perimeter Continuity Delegation: Packages the complete raw text dataset string and forwards it to the core receipt queue under the original trace context.

Interaction Protocol (Event Contract)

  • Method Name: ProcessReceiptImage
  • Message Broker: Apache Kafka
  • Ingress Topic (Subscription): bpds.inventory.in.receipt.image
  • Egress Topic (Publication): bpds.inventory.in.receipt.upload
  • Data Format: application/json

Ingress Message Payload Example

{
  "image_file_url": "https://minio.internal",
  "app_lang": "ru-RU",
  "x_request_id": "trace-ocr-censor-uuid"
}

Асинхронный метод-обработчик (Event Handler) ProcessReceiptImage развернут внутри микросервиса image-processor. Он выполняет архитектурную роль поставщика текстового контента чека (OCR Context Provider) и отвечает за вычитку задач из брокера Kafka, скачивание бинарных файлов фотографий бумажных чеков из объектного хранилища MinIO, построчную сегментацию символов и оптическое распознавание текста.

Метод преобразует графические пиксели в сырой текстовый массив данных. Для сохранения сквозной цепочки обработки и повторного использования контура защиты, извлеченный текст автоматически отправляется в унифицированную текстовую очередь, активируя существующий воркер censorship-control-worker.

Критические задачи метода

  1. Скачивание бинарного ассета: Потоковая загрузка снимка чека из S3-бакета в локальные слои оперативной памяти с помощью асинхронного конвейера Boto3.
  2. Оптическое распознавание символов (OCR Инференс): Обработка матрицы изображения с использованием аппаратного ускорения (GPU/CPU) для локализации строк, нормализации геометрии текста и синтеза символов.
  3. Делегирование в контур фильтрации: Упаковка извлеченного текстового массива в стандартизированное DTO и его публикация в общую текстовую очередь под оригинальным сквозным контекстом трассировки.

Протокол взаимодействия и триггеры (Event Contract)

  • Имя метода: ProcessReceiptImage
  • Брокер сообщений: Apache Kafka
  • Входной топик (Subscription): bpds.inventory.in.receipt.image
  • Выходной топик (Publication): bpds.inventory.in.receipt.upload
  • Формат данных: application/json

Пример входного события (Ingress Message Payload)

{
  "image_file_url": "https://minio.internal",
  "app_lang": "ru-RU",
  "x_request_id": "trace-ocr-censor-uuid"
}

Диаграмма последовательности (Mermaid)

sequenceDiagram
    autonumber
    participant K as Broker: Apache Kafka
    participant OCR as image-processor (AID)
    participant S3 as MinIO Object Storage

    K->>OCR: Step 7: Handler: ProcessReceiptImage()
    activate OCR
    
    critical Step 8: Download Target Binary Asset
        OCR->>S3: HTTP GET /receipt-images/uploads/...
        activate S3
        S3-->>OCR: Binary graphic stream
        deactivate S3
    option Storage Failure (HTTP 404 Not Found)
        Note over OCR: Terminate Cycle:<br/>Log error code IAD-VISION-404
    end

    Note over OCR: OCR Engine Inference:<br/>Line-by-line character extraction & text synthesis

    critical Step 11: Route Extracted Text to Censorship Queue
        OCR->>K: Push to topic: bpds.inventory.in.receipt.upload
    option OCR Low Confidence Score (< 0.85)
        Note over OCR: Asynchronous Outcome 10b:<br/>Raise ERR-LOW-OCR-CONFIDENCE for manual moderation fallback
    end
    deactivate OCR

sequenceDiagram
    autonumber
    participant K as Брокер: Apache Kafka
    participant OCR as image-processor (AID)
    participant S3 as MinIO Object Storage

    K->>OCR: Шаг 7: Handler: ProcessReceiptImage()
    activate OCR
    
    critical Шаг 8: Скачивание бинарного файла
        OCR->>S3: HTTP GET /receipt-images/uploads/...
        activate S3
        S3-->>OCR: Бинарный графический поток
        deactivate S3
    option Сбой хранилища (HTTP 404 Not Found)
        Note over OCR: Экстренное прерывание (Код IAD-VISION-404)
    end

    Note over OCR: Инференс OCR: извлечение и синтез текста

    critical Шаг 11: Перенаправление текста
        OCR->>K: Пуш в топик: bpds.inventory.in.receipt.upload
    option Низкая уверенность OCR (< 0.85)
        Note over OCR: Исход 10б: Генерация ERR-LOW-OCR-CONFIDENCE
    end
    deactivate OCR


Расшифровка шагов

Step Action Parameters / Requests / DTO Errors (Exceptions / Statuses)
7 (K -> OCR) The worker polls the text extraction event from the message broker queue, maps properties, and provisions threads to load the graphics array. Kafka Ingress Payload:
The JSON request contract metadata properties specified above.
No business errors
8 (OCR -> S3) The microservice sends a request to the S3 bucket using secured internal tokens to stream the receipt image directly into processing memory. HTTP GET Request:
URL: https://minio.internal
IAD-VISION-404: Target source image asset was not found or deleted from storage before processing.
11 (OCR -> K) The local OCR model successfully synthesizes lines. The script packages the extracted text into the common input payload layout and publishes it to the broker. Kafka Egress Message:
Topic: bpds.inventory.in.receipt.upload
Payload: { "raw_text_input": "ФН 9999 ИНН 12345 ТОВАР...", "app_lang": "ru-RU", "x_request_id": "trace-ocr-censor-uuid" }
IAD-OCR-422: Image is unreadable, blurred, or average character recognition confidence score dropped below 0.85.
Шаг Действие Параметры / Запросы / DTO Ошибки (Исключения / Статусы)
7 (K -> OCR) Воркер вычитывает событие из очереди брокера сообщений, извлекает JSON-контекст и выделяет системные потоки под новую задачу распознавания. Kafka Ingress Payload:
JSON-контракт со свойствами и метаданными, описанными выше в примере.
Бизнес-ошибки отсутствуют
8 (OCR -> S3) Микросервис обращается к бакету S3, используя внутренние токены безопасности, для прямой потоковой загрузки картинки чека в память инференса. HTTP GET Request:
URL: https://minio.internal
IAD-VISION-404: Целевой графический файл чека не найден или был удален из хранилища до начала обработки воркером.
11 (OCR -> K) Локальная нейросеть успешно собирает строки текста. Скрипт упаковывает результат в стандартный формат и публикует событие в брокер. Kafka Egress Message:
Топик: bpds.inventory.in.receipt.upload
Payload: { "raw_text_input": "ФН 9999 ИНН 12345 ТОВАР...", "app_lang": "ru-RU", "x_request_id": "trace-ocr-censor-uuid" }
IAD-OCR-422: Фотография чека размыта, повреждена или средний коэффициент уверенности распознавания упал ниже 0.85.