API pour l'extraction automatique des renseignements : Comment traiter les documents sans saisie manuelle
La saisie manuelle des renseignements à partir des documents entraîne des erreurs et ralentit les processus. Notre API automatise l'extraction de l'INN, KPP, BIK et autres données à partir de PDF, DOCX et autres formats, garantissant précision et intégration avec les systèmes 1C et CRM. La solution réduit les erreurs de traitement des documents de 70 % grâce à une analyse contextuelle et une validation stricte.
Architecture de traitement des documents
Le système est construit autour d'un pipeline de traitement multi-étapes. La première étape est la normalisation des données d'entrée. Les formats suivants sont pris en charge :
- PDF avec couche de texte
- DOCX/DOC
- TXT en encodages UTF-8 et CP1251
- RTF et HTML
Limitation importante : Les PDF scannés et les images nécessitent un pré-traitement via OCR. Notre API ne fonctionne qu'avec des documents textuels, ce qui est crucial pour le bon fonctionnement du modèle NER.
Étape clé — analyse contextuelle utilisant une combinaison d'expressions régulières et d'apprentissage automatique. Pour chaque type de renseignement, des règles spécifiques sont appliquées :
- INN : vérification de longueur (10/12 chiffres) et somme de contrôle
- OGRN : validation de structure et chiffre de contrôle
- BIK : correspondance au registre bancaire et vérification du compte correspondant
- Comptes bancaires : conformité au format et vérification logique BIK
- Noms juridiques : normalisation via dictionnaire des organisations enregistrées
Implémentation technique
L'extrémité API suit les principes RESTful avec des exigences de requête minimales. Seule une clé API dans l'en-tête X-API-Key est nécessaire. Le corps de la requête est envoyé sous forme de multipart/form-data avec le champ file.
Paramètres critiques
- Délai d'attente de traitement : 120 secondes (intervalle minimum recommandé)
- Taille maximale du fichier : 20 MB
- Encodages pris en charge : UTF-8, CP1251 (détection automatique)
- Format de réponse : JSON avec champ
successobligatoire
Exemple de gestion d'erreur :
{
"success": false,
"error": "payload_too_large",
"message": "Size fayla exceeds 20 MB"
}
Exemples d'intégration
Pour accélérer la mise en œuvre, des modèles de code pour les piles populaires sont fournis. Chaque exemple inclut la gestion des délais d'attente et la validation de la réponse.
Python avec gestion d'erreurs
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
Fonctionnalité clé de l'implémentation — formation manuelle de la requête multipart. Il est critiquement important de respecter l'ordre des en-têtes et de gérer correctement les données binaires :
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);
Points importants
- Validation via sommes de contrôle : L'API ne retourne pas de données avec somme de contrôle INN/OGRN invalide
- Délais d'attente : Définir l'intervalle à au moins 120 secondes pour les documents complexes
- Limitations : Seuls les formats textuels sont pris en charge, les documents scannés nécessitent un traitement OCR préalable
- Intégration 1C : Implémentée via formation manuelle de requête multipart
- Taille maximale : Les fichiers de plus de 20 MB sont rejetés avec le code 413
Gestion des erreurs et surveillance
Le système utilise une approche combinée pour la gestion des pannes. Pour chaque type d'erreur, un code HTTP spécifique et une description textuelle dans le corps de la réponse sont fournis.
Scénarios critiques :
- 408 Request Timeout : Augmenter le délai à 120 secondes
- 413 Payload Too Large : Diviser le document en parties
- 401 Unauthorized : Vérifier la validité de la clé API
- 500 Internal Error : Notifier automatiquement de l'échec via webhook
Nous recommandons d'implémenter une logique de retry avec backoff exponentiel pour les erreurs transitoires. Exemple en 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")
}
Benchmarks et performances
Des tests ont été menés sur un ensemble de 10 000 documents de divers formats. Résultats :
- Temps de traitement moyen PDF : 4,2 s
- Temps maximum pour DOCX avec graphiques : 118 s
- Précision d'extraction INN : 99,7 %
- Précision d'extraction des comptes bancaires : 98,4 %
Le système s'étend horizontalement via Kubernetes. À des charges supérieures à 50 RPS, des nœuds workers sont ajoutés automatiquement. Pour les clients entreprise, une installation on-premise avec support FIPS 140-2 est disponible.
— Editorial Team
Aucun commentaire pour le moment.