Powrót do strony głównej

API wyodrębniania rekwizytów — automatyzacja przetwarzania dokumentów

Techniczny opis API do automatycznego wyodrębniania rekwizytów z dokumentów. Szczegółowa architektura przetwarzania, przykłady kodu do integracji i metody walidacji danych. Rozwiązanie redukuje błędy przy ręcznym wprowadzaniu o 70%.

API do automatycznego rozpoznawania rekwizytów w dokumentach
Advertisement 728x90

API do automatycznego wyodrębniania rekwizytów: jak przetwarzać dokumenty bez ręcznego wprowadzania

Ręczny input rekwizytów z dokumentów prowadzi do błędów i spowalnia procesy. Nasze API automatyzuje wyodrębnianie INN, KPP, BIK i innych danych z PDF, DOCX i innych formatów, zapewniając dokładność i integrację z 1C i systemami CRM. Rozwiązanie zmniejsza liczbę błędów przy przetwarzaniu dokumentów o 70% dzięki analizie kontekstowej i ścisłej walidacji.

Architektura przetwarzania dokumentów

System jest oparty na wieloetapowym potoku przetwarzania. Pierwszy etap to normalizacja danych wejściowych. Obsługiwane są następujące formaty:

  • PDF z warstwą tekstową
  • DOCX/DOC
  • TXT w kodowaniach UTF-8 i CP1251
  • RTF i HTML

Ważne ograniczenie: zeskanowane PDF i obrazy wymagają wstępnej obróbki za pomocą OCR. Nasze API działa wyłącznie z dokumentami tekstowymi, co jest kluczowe dla poprawnego funkcjonowania modelu NER.

Google AdInline article slot

Kluczowym etapem jest analiza kontekstowa z wykorzystaniem kombinacji wyrażeń regularnych i uczenia maszynowego. Dla każdego typu rekwizytu stosowane są specyficzne reguły:

  • INN: sprawdzenie długości (10/12 cyfr) i sumy kontrolnej
  • OGRN: walidacja struktury i sumy kontrolnej
  • BIK: zgodność z rejestrem bankowym i sprawdzenie rachunku korespondentowego
  • Rachunki rozliczeniowe: sprawdzenie zgodności z formatem i logiką BIK
  • Nazwy prawne: normalizacja za pomocą słownika zarejestrowanych organizacji

Realizacja techniczna

Endpoint API jest zbudowany zgodnie z zasadami RESTful przy minimalnych wymaganiach co do żądania. Do działania wystarczy klucz API w nagłówku X-API-Key. Ciało żądania przesyłane jest jako multipart/form-data z polem file.

Krytyczne parametry

  • Limit czasu przetwarzania: 120 sekund (minimalny zalecany interwał)
  • Maksymalny rozmiar pliku: 20 MB
  • Obsługiwane kodowania: UTF-8, CP1251 (autodetekcja)
  • Format odpowiedzi: JSON z obowiązkowym polem success

Przykład obsługi błędów:

Google AdInline article slot
{
  "success": false,
  "error": "payload_too_large",
  "message": "Size fayla exceeds 20 MB"
}

Przykłady integracji

Aby przyspieszyć wdrożenie, przygotowano szablony kodu dla popularnych stosów technologicznych. Każdy przykład obejmuje obsługę limitów czasu i walidację odpowiedzi.

Python z obsługą błędów

import requests
from requests.exceptions import Timeout, RequestException

def extract_requisites(api_key, file_path):
    try:
        with open(file_path, 'rb') as f:
            response = requests.post(
                'https://api-k.ru/api/rekvizit_json',
                headers={'X-API-Key': api_key},
                files={'file': f},
                timeout=120
            )
        response.raise_for_status()
        return response.json()
    except Timeout:
        raise Exception('Timeout exceeded processing')
    except RequestException as e:
        raise Exception(f'Error API: {str(e)}')

1C:Enterprise 8.3

Cechą implementacji jest ręczne tworzenie żądania multipart. Kluczowe jest przestrzeganie kolejności nagłówków i prawidłowa obsługa danych binarnych:

Boundary = "----WebKitFormBoundary" + StringReplace(Withtroka(New UniqueIdentifier()), "-", "");
Body = New MemoryStream;
DataRecord = New DataRecord(Body, , , Characters.VK + Characters.PWith, "");

DataRecord.WriteWithtroku("--" + Boundary);
DataRecord.WriteWithtroku("Content-Disposition: form-data; name=\"file\"; filename=\"" + FileName + "\"");
DataRecord.WriteWithtroku("Content-Type: application/octet-stream");
DataRecord.WriteWithtroku("");
DataRecord.Write(FileBinaryData);

Co ważne

  • Walidacja za pomocą sum kontrolnych: API nie zwraca danych z niepoprawną sumą kontrolną INN/OGRN
  • Limity czasu: Ustaw interwał co najmniej 120 sekund dla skomplikowanych dokumentów
  • Ograniczenia: Obsługiwane tylko formaty tekstowe, dokumenty zeskanowane wymagają wstępnej obróbki OCR
  • Integracja z 1C: Zrealizowana poprzez ręczne formowanie żądań multipart
  • Maksymalny rozmiar: Pliki powyżej 20 MB są odrzucane z kodem 413

Obsługa błędów i monitorowanie

System stosuje hybrydowe podejście do obsługi błędów. Dla każdego typu błędu przewidziano dedykowany kod HTTP oraz opis tekstowy w odpowiedzi.

Google AdInline article slot

Krytyczne scenariusze:

  • 408 Request Timeout: Zwiększ limit czasu do 120 sekund
  • 413 Payload Too Large: Podziel dokument na części
  • 401 Unauthorized: Sprawdź poprawność klucza API
  • 500 Internal Error: Automatycznie powiadamiamy o błędzie za pomocą webhooka

Zalecamy wdrożenie mechanizmu ponawiania z wykładniczym backoffem dla błędów przejściowych. Przykład w Go:

func withRetry(attempts int, sleep time.Duration, f func() error) error {
    for i := 0; i < attempts; i++ {
        if i > 0 {
            time.Sleep(sleep)
            sleep *= 2
        }
        err := f()
        if err == nil {
            return nil
        }
        var apiErr *APIError
        if errors.As(err, &apiErr) && apiErr.Code != 500 {
            return err
        }
    }
    return errors.New("prevysheno count popytok")
}

Benchmarki i wydajność

Testy przeprowadzono na zbiorze 10 000 dokumentów w różnych formatach. Wyniki:

  • Średni czas przetwarzania PDF: 4,2 s
  • Maksymalny czas dla DOCX z grafiką: 118 s
  • Dokładność wyodrębniania INN: 99,7%
  • Dokładność wyodrębniania rachunków rozliczeniowych: 98,4%

System skaluje się poziomo za pomocą Kubernetes. Przy obciążeniu powyżej 50 RPS automatycznie dodawane są węzły worker. Dla klientów enterprise dostępna jest instalacja on-premise z obsługą FIPS 140-2.

— Editorial Team

Advertisement 728x90

Czytaj dalej