Перейти к содержанию

Kyc service

kyc-service интеграция: HTTP job submission, callback, OCR result.

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

sequenceDiagram
    KycEndpoint->>KycQueueService: submitKycJob(userId, kycId, s3Keys)
    KycQueueService->>kycsvc: POST /api/v1/process (X-Service-Token)
    Note over kycsvc: OCR + face match (async, BullMQ)
    kycsvc->>AC: callback POST (faceMatchScore, ocrResult encrypted)
    AC->>KycService: autoVerify() если faceMatchScore >= 0.85
    AC->>KycService: submitForManualReview() если faceMatchScore < 0.85

Вызов KycQueueService.submitKycJob — fire-and-forget (unawaited). Session может быть уже закрыта к моменту выполнения.

Конфиг из passwords.yaml

Ключ Dev default Назначение
kycServiceUrl http://10.10.10.19:3003 Base URL kyc-service
kycServiceSecret dev-kyc-secret-change-in-prod Передаётся в заголовке X-Service-Token

Что отправляет AC

POST $kycServiceUrl/api/v1/process с телом:

Поле Тип Описание
userId int Numeric ID пользователя
kycId int ID записи kyc_verification
passportKey string S3 ключ фото паспорта
selfieKey string S3 ключ селфи
stampKey string? S3 ключ штампа визы (опционально)

Ответ: { "jobId": "..." } — логируется, не используется для дальнейшей логики.

Что возвращает kyc-service (callback)

kyc-service оборачивает результат OCR в формат:

{ "ocrData": { ... }, "faceMatchScore": 0.92 }
Поле Тип Описание
faceMatchScore double Уверенность совпадения лица (0.0–1.0)
ocrData object Распознанные поля паспорта

ocrResult хранится в kyc_verification.ocrResult как AES-256-GCM зашифрованный ByteData через PiiCryptoService.

Порог autoVerify

Условие Действие
faceMatchScore >= 0.85 autoVerify() — KYC автоматически одобряется
faceMatchScore < 0.85 submitForManualReview() — статус pending_operator_review
status = ocr_failed retryKycProcessing() — повторная отправка старых S3 ключей

Retry при ocr_failed

KycService.retryKycProcessing(session, userId) — допускается только при status = ocr_failed. Повторно вызывает KycQueueService.submitKycJob с теми же S3 ключами, что уже хранятся в kyc_verification.

Ошибки KycQueueService (DioException и прочие) логируются на уровне SEVERE, но не пробрасываются — операция не откатывается.