API pro automatické extrahování rekvizit: jak zpracovávat dokumenty bez ručního zadávání
Ruční zadávání rekvizit z dokumentů vede k chybám a zpomaluje procesy. Naše API automatizuje extrakci INN, KPP, BIK a dalších údajů z PDF, DOCX a dalších formátů, zajišťuje přesnost a integraci s 1C a CRM-systémy. Řešení snižuje počet chyb při zpracování dokumentů o 70 % díky kontextové analýze a přísné validaci.
Architektura zpracování dokumentů
Systém je postavený kolem vícestupňového konvejéru zpracování. První etapa – normalizace vstupních dat. Jsou podporovány následující formáty:
- PDF s textovou vrstvou
- DOCX/DOC
- TXT v kódováních UTF-8 a CP1251
- RTF a HTML
Důležité omezení: naskenované PDF a obrázky vyžadují předchozí zpracování prostřednictvím OCR. Naše API pracuje pouze s textovými dokumenty, což je klíčové pro správnou funkci NER-modelu.
Klíčová etapa – kontextová analýza s využitím kombinace regulárních výrazů a strojového učení. Pro každý typ rekvizity se aplikují specifická pravidla:
- INN: kontrola délky (10/12 číslic) a kontrolní součtu
- OGRN: validace struktury a digitálního podpisu
- BIK: shoda s bankovním rejstříkem a kontrola korespondenčního účtu
- Výpočetní účty: kontrola shody s formátem a logikou BIK
- Právní názvy: normalizace prostřednictvím slovníku registrovaných organizací
Technická realizace
Endpoint API je postavený na RESTful principech s minimálními požadavky na požadavek. Pro práci je nutný pouze API-klíč v hlavičce X-API-Key. Tělo požadavku se předává jako multipart/form-data s polem file.
Kritické parametry
- Timeout zpracování: 120 sekund (minimální doporučený interval)
- Maximální velikost souboru: 20 MB
- Podporovaná kódování: UTF-8, CP1251 (autodetekce)
- Formát odpovědi: JSON s povinným polem
success
Příklad zpracování chyb:
{
"success": false,
"error": "payload_too_large",
"message": "Size fayla exceeds 20 MB"
}
Integrační příklady
Pro urychlení implementace jsou připravené šablony kódu pro hlavní stacky. Každý příklad zahrnuje zpracování timeoutů a validaci odpovědi.
Python se zpracováním chyb
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
Peculiarita implementace – ruční tvorba multipart požadavku. Klíčové je dodržet pořadí hlaviček a správně zpracovat binární data:
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 je důležité
- Validace prostřednictvím kontrolních součtů: API nevrací data s nesprávným kontrolním součtem INN/OGRN
- Timeouty: Nastavte interval ne méně než 120 sekund pro zpracování složitých dokumentů
- Omezení: Podporovány pouze textové formáty, naskenované dokumenty vyžadují předchozí OCR zpracování
- Integrace s 1C: Realizováno prostřednictvím ruční tvorby multipart požadavků
- Maximální velikost: Soubory nad 20 MB jsou odmítnuty s kódem 413
Zpracování chyb a monitorování
Systém využívá kombinovaný přístup k zpracování selhání. Pro každý typ chyby je předviden specifický HTTP kód a textový popis v těle odpovědi.
Kritické scénáře:
- 408 Request Timeout: Zvyšte timeout na 120 sekund
- 413 Payload Too Large: Rozdělte dokument na části
- 401 Unauthorized: Zkontrolujte správnost API-klíče
- 500 Internal Error: Automaticky upozorňujeme na selhání prostřednictvím webhooku
Doporučujeme implementovat retry logiku s exponenciálním zpožděním pro dočasné chyby. Příklad v 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")
}
Benchmarky a výkon
Testování probíhalo na sadě z 10 000 dokumentů různých formátů. Výsledky:
- Průměrný čas zpracování PDF: 4,2 s
- Maximální čas pro DOCX s grafikou: 118 s
- Přesnost extrakce INN: 99,7 %
- Přesnost extrakce výpočetních účtů: 98,4 %
Systém se škáluje horizontálně prostřednictvím Kubernetes. Při zátěži nad 50 RPS se automaticky přidávají worker-nody. Pro enterprise-klienty je dostupná on-premise instalace s podporou FIPS 140-2.
— Editorial Team
Zatím žádné komentáře.