> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Предупреждения и коды ошибок верификации личности

> Все предупреждения модуля верификации личности Didit: триггеры отклонения, группы риска, подделки, их причины и устранение.

## Обзор

Предупреждения в отчёте о верификации личности отмечают каждое условие, зафиксированное Didit при считывании и валидации документа. Они передаются в массиве `warnings[]` каждого элемента списка `id_verifications[]` (см. [Отчёт о верификации личности](https://docs.didit.me/ru/core-technology/id-verification/report-id-verification.md)) в структуре, описанной в разделе [Модели данных — Объект предупреждения](https://docs.didit.me/ru/reference/data-models.md#объект-предупреждения): `feature`, `risk`, `additional_data`, `log_type`, `short_description`, `long_description`, `node_id`.

Каждое предупреждение имеет три уровня:

1. **Код `risk`** — неизменный идентификатор, который можно использовать для сопоставления в вашем коде.
2. **`log_type`** — определяется действием, назначенным риску в вашей конфигурации на момент оценки: **Отклонить → `error`**, **Проверить → `warning`**, любое другое → `information`.
3. **Влияние на решение** — задаётся настраиваемыми группами рисков сценария. Один и тот же код `risk` может приводить к результатам **Одобрено**, **На проверке** или **Отклонено** в зависимости от конфигурации вашего приложения.

## Условия автоматического отклонения

В сценариях следующие риски всегда приводят к переводу отчёта о верификации личности (и сессии) в статус `Declined`. Их нельзя перенастроить:

| Риск | Триггер |
| - | - |
| `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` | Предоставленный тип документа отсутствует в списке разрешённых документов вашего приложения. Поле `additional_data` содержит `issuing_state`, `document_type`, `document_subtype`, `document_region` и `document_region_with_subtype`, что позволяет включить нужный документ в сценарии. |
| `DOCUMENT_EXPIRED` | Срок действия документа истёк на момент захвата. |
| `PORTRAIT_IMAGE_NOT_DETECTED` | На документе не удалось обнаружить фото владельца. |
| `ID_DOCUMENT_IN_BLOCKLIST` | Документ совпадает с записью в списке блокировки вашего приложения. |
| `FRONT_CAMERA_FACE_IN_BLOCKLIST` | Селфи, сделанное фронтальной камерой при съёмке документа, совпадает с лицом из вашего списка блокировки лиц. |
| `AGE_BELOW_MINIMUM` | Только для адаптивных сценариев верификации возраста: извлечённый возраст ниже минимального. |
| `AGE_NOT_DETECTED` | Только для адаптивных сценариев верификации возраста: не удалось извлечь возраст из документа. |

Для **автономного OCR API** набор безоговорочного отклонения включает: `DOCUMENT_EXPIRED`, `MINIMUM_AGE_NOT_MET`, `PORTRAIT_IMAGE_NOT_DETECTED`, `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED` и `PUBLIC_DOCUMENT_IMAGE_DETECTED`. В сценариях минимальный возраст настраивается (по умолчанию Отклонить), а три риска проверки живости документа определяются порогами (см. ниже).

Настраиваемые риски этого API принимают параметры запроса `DECLINE` или `NO_ACTION`, а не решение Проверка. Единственный результат «На проверке», который он может возвращать, не настраивается: когда запрошенная проверка живости документа не позволяет получить пригодную оценку, возвращается ответ `In Review` с предупреждением `DOCUMENT_LIVENESS_NOT_COMPUTED` (см. [Живость документа](#проверка-живости-документа-подделка)).

| Параметр запроса | Риски | По умолчанию |
| - | - | - |
| `invalid_mrz_action` | `MRZ_VALIDATION_FAILED`, `MRZ_NOT_DETECTED` | `DECLINE` |
| `inconsistent_data_action` | `DATA_INCONSISTENT`, `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME`, `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS` | `DECLINE` |
| `expiration_date_not_detected_action` | `EXPIRATION_DATE_NOT_DETECTED` | `NO_ACTION` |
| `critical_field_occlusion_action` | `CRITICAL_FIELD_OCCLUSION_DETECTED` | `DECLINE` |
| `document_or_personal_number_format_mismatch_action` | `DOCUMENT_NUMBER_FORMAT_MISMATCH`, `PERSONAL_NUMBER_FORMAT_MISMATCH` | `NO_ACTION` |

## Настраиваемые параметры верификации

В консоли Didit оставшиеся риски верификации личности объединены в настройки, для которых можно задать действие **Одобрить**, **Проверить** или **Отклонить** (для каждого сценария и для каждого узла в сценариях с графом):

| Группа | Риски | Действие по умолчанию |
| - | - | - |
| **Минимальный возраст** | `MINIMUM_AGE_NOT_MET` | Отклонить |
| **Максимальный возраст** | `MAXIMUM_AGE_EXCEEDED` | Отклонить |
| **Дублированный пользователь** | `POSSIBLE_DUPLICATED_USER` (пропускается, если номер документа находится в вашем списке разрешённых документов) | Одобрить (информация) |
| **Недействительный код** | `QR_NOT_DETECTED`, `BARCODE_NOT_DETECTED`, `QR_VALIDATION_FAILED`, `BARCODE_VALIDATION_FAILED` | Одобрить (информация) |
| **Недействительный MRZ** | `MRZ_VALIDATION_FAILED`, `MRZ_NOT_DETECTED` | Одобрить (информация) |
| **Несоответствие данных** | `DATA_INCONSISTENT`, `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME`, `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`, `DOCUMENT_SIDES_MISMATCH`, `ID_VERIFICATION_DATA_MISMATCH_BETWEEN_DOCUMENTS` | Одобрить (информация) |
| **Недействительная проверка** | `INVALID_DATE`, `COULD_NOT_RECOGNIZE_DOCUMENT`, `DOCUMENT_NUMBER_NOT_DETECTED`, `COULD_NOT_DETECT_DOCUMENT_TYPE`, `NAME_NOT_DETECTED`, `DATE_OF_BIRTH_NOT_DETECTED` | Проверить |
| **Несоответствие ожидаемых данных** | `FULL_NAME_MISMATCH_WITH_PROVIDED`, `GENDER_MISMATCH_WITH_PROVIDED`, `DOB_MISMATCH_WITH_PROVIDED`, `COUNTRY_MISMATCH_WITH_PROVIDED`, `NATIONALITY_MISMATCH_WITH_PROVIDED`, `IDENTIFICATION_NUMBER_MISMATCH_WITH_PROVIDED` | Проверить |
| **Срок действия не обнаружен** | `EXPIRATION_DATE_NOT_DETECTED` | Одобрить (информация) |
| **Несоответствие формата номера документа или персонального номера** | `DOCUMENT_NUMBER_FORMAT_MISMATCH`, `PERSONAL_NUMBER_FORMAT_MISMATCH` (одно общее действие) | Проверить |
| **Критическое поле закрыто** | `CRITICAL_FIELD_OCCLUSION_DETECTED` | Проверить |
| **Нераспознанный адрес** | `UNPARSED_ADDRESS` | Одобрить (информация) |
| **Качество изображения** | `IMAGE_TOO_BLURRY`, `IMAGE_TOO_DARK`, `IMAGE_TOO_BRIGHT` (одно действие на каждый риск) | Одобрить (информация) |
| **Документ без портрета** | `DOCUMENT_HAS_NO_PORTRAIT` | Проверить |
| **Дублированное лицо при тихом захвате** | `FRONT_CAMERA_DUPLICATED_FACE`, `POSSIBLE_FRONT_CAMERA_DUPLICATED_FACE` (одно общее действие) | Одобрить (информация) |
| **Дубликат при тихом захвате с другим именем** | `FRONT_CAMERA_DUPLICATED_FACE_NAME_MISMATCH` (может только ужесточить результат проверки на дублирование лица) | Проверить |
| **Дубликат при тихом захвате с другой датой рождения** | `FRONT_CAMERA_DUPLICATED_FACE_DOCUMENT_MISMATCH` (может только ужесточить результат проверки на дублирование лица) | Проверить |

Риски дубликата при тихом захвате и списка блокировки возникают в результате [Поиска по лицу на селфи, сделанном при захвате документа](https://docs.didit.me/ru/core-technology/face-search/overview.md#селфи-сделанное-во-время-захвата-документа). Поиск выполняется, если включён параметр **Поиск по лицу при тихом захвате** (`document_selfie_face_search_enabled`) (по умолчанию он включён) и Поиск по лицу не отключён на шаге проверки живости; в противном случае ни один из этих шести рисков не формируется.

Два семейства рисков верификации личности **управляются порогами**, а не переключателями Одобрить/Проверить/Отклонить:

* **Проверка живости документа** — `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED`. Для каждого вида мошенничества предусмотрены собственные пороги отклонения и проверки: балл ниже порога отклонения → `error` + Отклонена; ниже порога проверки → `warning` + На проверке; иначе `information`.
* **Сравнение лиц с разных камер** — `LOW_FRONT_CAMERA_FACE_MATCH_SIMILARITY`, регулируется параметрами `document_selfie_portrait_match_decline_threshold` / `document_selfie_portrait_match_review_threshold`.

### Настройка порогов проверки живости документа

В редакторе сценариев эти пороги находятся на вкладке **Подделка** шага Верификация личности, по одной карточке для каждого вида мошенничества: **Замена портрета**, **Распечатанная копия** и **Снимок экрана**.

Каждая проверка выставляет документу балл от `0` до `100` в зависимости от степени его подлинности. **Более высокий балл означает более высокую вероятность того, что документ подлинный.** Два значения на карточке делят эту шкалу на три диапазона:

| Балл | Результат |
| - | - |
| Ниже значения **Отклонить** | `error`, сессия отклонена |
| Равен или превышает значение **Отклонить** и ниже значения **Проверить** | `warning`, сессия переходит в статус «На проверке» |
| Равен или превышает значение **Проверить** | `information`, проверка пройдена |

Повышение любого из значений делает проверку более строгой: больше сессий попадает в диапазон выше этого значения. Снижение значения позволяет пропустить больше сессий. В редакторе значение Отклонить не может превышать значение Проверить. При вызове через API значение Отклонить выше значения Проверить удаляет диапазон «На проверке».

Значения платформы по умолчанию, используемые, если они не заданы в сценарии:

| Вид мошенничества | Отклонить ниже | Проверить ниже | Ключи конфигурации сценария |
| - | - | - | - |
| Замена портрета | `35` | `70` | `document_liveness_portrait_replace_decline_threshold`, `document_liveness_portrait_replace_review_threshold` |
| Распечатанная копия | `35` | `77` | `document_liveness_printed_copy_decline_threshold`, `document_liveness_printed_copy_review_threshold` |
| Снимок экрана | `30` | `70` | `document_liveness_screen_replay_decline_threshold`, `document_liveness_screen_replay_review_threshold` |

Начинайте со значений по умолчанию и изменяйте по одному значению за раз. На каждой карточке отображается значение по умолчанию и кнопка **Сбросить к значению по умолчанию**, чтобы вы всегда могли к нему вернуться. Редактор также предупреждает о следующих конфигурациях:

* **Проверка на уровне `100`.** Проходят только сессии с идеальным баллом, поэтому практически каждая сессия переходит в статус «На проверке» или отклоняется.
* **Отклонить на уровне `100`.** Только идеальный балл позволяет избежать отклонения, поэтому практически каждая сессия отклоняется.
* **Оба значения на уровне `0`.** Ни один балл не будет помечен, поэтому проверка фактически отключена.

Установка обоих значений на одно и то же число удаляет диапазон «На проверке»: балл ниже этого числа отклоняется, а при любом другом балле сессия проходит проверку.

Если один и тот же документ подпадает под подозрение как **Распечатанная копия**, так и **Снимок экрана**, возвращается только `SCREEN_CAPTURE_DETECTED`.

Сравнение лиц с разных камер использует тот же принцип с одним отличием на границе: балл, равный порогу проверки, всё равно переводит сессию в статус «На проверке».

Четыре риска, связанных с удостоверением личности, не настраиваются и не зависят от порогов. `POSSIBLE_FRONT_CAMERA_FACE_IN_BLOCKLIST` всегда направляет на этап **Проверка**: селфи, похожее на лицо из списка блокировки, но не являющееся подтвержденным совпадением, должен оценивать человек, оно никогда не отклоняется автоматически и никогда не игнорируется. `BARCODE_SIGNATURE_INVALID` всегда направляет на этап **Проверка**. Оно срабатывает только тогда, когда штрихкод содержит подпись органа выдачи, не прошедшую криптографическую проверку, поэтому нет такой конфигурации, при которой доказанная подделка была бы проигнорирована. `DOCUMENT_BACK_SIDE_NOT_AVAILABLE` всегда носит статус **информация** и никогда не влияет на решение: оно сообщает об ограничении каталога документов Didit, а не о свойстве представленного документа, поэтому ни при какой конфигурации оно не может привести к отклонению или отправке на проверку подлинного владельца.
`FRONT_CAMERA_CAPTURED_DOCUMENT` всегда направляет на этап **Проверка**.
Оно срабатывает только тогда, когда кадр с фронтальной камеры, сделанный во время сканирования документа, показывает документ, удостоверяющий личность, и ни одного человека, поэтому снимок, не дающий информации о том, кто держал документ, всегда поступает на проверку проверяющему.
Оно проверяется всякий раз, когда включено сопоставление селфи при захвате документа (`is_document_selfie_portrait_match_enabled`).

## Сформированные предупреждения

Проверено по `collect_ocr_logs`, процессу захвата документа и `process_ocr_logs_and_get_status`. Краткие описания ниже представляют собой точные строки `short_description`, возвращаемые API.

### Распознавание и качество документа

| Риск | Краткое описание | Причина | Уровень серьезности |
| - | - | - | - |
| `COULD_NOT_RECOGNIZE_DOCUMENT` | Could not validate Document | Системе не удалось подтвердить подлинность или действительность предоставленного документа — часто из-за низкого качества изображения или неподдерживаемого типа документа. Также используется как запасной вариант для нераспознанных сбоев обработки. | Настраиваемый — Invalid Validation, по умолчанию Review |
| `COULD_NOT_DETECT_DOCUMENT_TYPE` | Could not detect document type | Лицевая сторона документа не совпадает с известным официальным дизайном документов с высокой степенью уверенности, или OCR-движку не удалось классифицировать семейство документов (паспорт, ID-карта или водительские права). Документ, содержащий действительные данные, но макет которого не соответствует ни одному официальному дизайну (отредактированный или сгенерированный на компьютере документ, либо новый дизайн, который еще не поддерживается), попадает сюда. При срабатывании этого предупреждения `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` подавляется (тип неизвестен, поэтому формулировка «не поддерживается» была бы противоречивой). | Настраиваемый — Invalid Validation, по умолчанию Review |
| `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` | Document not supported for your application | Распознанный тип документа отсутствует в списке разрешенных для приложения. `additional_data` содержит страну, тип документа, подтип и подтип с учетом региона. | `error` — **автоматическое отклонение** |
| `DOCUMENT_EXPIRED` | Document expired | В момент захвата: срок действия документа истек (`error`, автоматическое отклонение). После одобрения: постоянный мониторинг срока действия добавляет это предупреждение со значением `log_type: "warning"`, когда истекает срок действия одобренного документа, и статус отчета меняется на `Expired`. | `error` при захвате; `warning` от мониторинга |
| `DOCUMENT_SIDES_MISMATCH` | Document sides mismatch | Изображения лицевой и оборотной сторон не принадлежат одному и тому же документу. | Настраиваемый — Data Inconsistency, по умолчанию information |
| `DOCUMENT_BACK_SIDE_NOT_AVAILABLE` | Back side not available for this document | Сценарий запрашивал обе стороны, лицевая сторона была распознана, но в каталоге документов Didit для этого конкретного документа оборотная сторона не зарегистрирована, поэтому удалось получить только лицевую сторону. В отчете представлены данные только по одной стороне. С предоставленным документом все в порядке, владельца никогда не просят переснять его, а повторное сканирование не добавит оборотную сторону. `additional_data` содержит распознанное значение `front_document_name`. | `information` — никогда не влияет на решение |
| `PORTRAIT_IMAGE_NOT_DETECTED` | Portrait image not detected | Не удалось обнаружить фотографию лица на документе, где она должна быть (откладывается, если пользователь сначала загружает сторону без фотографии). | `error` — **автоматическое отклонение** |
| `DOCUMENT_HAS_NO_PORTRAIT` | Document has no portrait | Распознанное семейство документов никогда не содержит фотографии лица ни на одной из сторон (некоторые виды на жительство, медицинские карты, регистрационные свидетельства, налоговые карточки, а также ряд водительских удостоверений/ID-карт). Это характеристика данного типа документа на уровне каталога, а не проблема с качеством изображения — повторное сканирование документа не изменит результат. | Настраиваемый — Document Without Portrait, по умолчанию Review |
| `IMAGE_TOO_BLURRY` / `IMAGE_TOO_DARK` / `IMAGE_TOO_BRIGHT` | Document image is too blurry / too dark / too bright | Контроль качества изображения отклонил загрузку (пользователю предлагается сделать повторный снимок). `additional_data` содержит сторону `side`, не прошедшую проверку. Успешный повторный снимок снимает устаревшее предупреждение; проверка качества пропускается при последней разрешенной попытке пользователя, чтобы не блокировать его полностью. | Настраиваемый — действие Image Quality для каждого риска, по умолчанию information |

> [!NOTE]
>
> Процесс захвата также может отклонить загрузку с кодами обратной связи `IMAGE_RESOLUTION_TOO_LOW`, `DOCUMENT_NOT_FULLY_VISIBLE`, `IMAGE_QUALITY_TOO_LOW` и `DOCUMENT_OCCLUSION_DETECTED` (палец или посторонний предмет физически закрывает печатный текст). Каждый из них вызывает предложение переснять снимок в SDK и фиксируется в отчете как отдельный риск, обрабатываемый настройками Image Quality — `DOCUMENT_OCCLUSION_DETECTED` и `IMAGE_QUALITY_TOO_LOW` используют одно общее действие. Они относятся к процессу *захвата*: успешный повторный снимок снимает предупреждение. Вопрос о том, должно ли перекрытое поле влиять на решение, относится к отдельной проверке целостности `CRITICAL_FIELD_OCCLUSION_DETECTED` ниже, которая срабатывает во время принятия решения и по умолчанию имеет действие Review.

> [!TIP]
>
> Если ваш сценарий привязывает подтверждение личности к Face Match, а не к фотографии в документе, рассмотрите возможность настроить для **Document Without Portrait** действие Decline — иначе семейство документов без фото дойдет до шага Face Match, где будет не с чем сопоставлять изображение.

### Извлечение полей

| Риск | Краткое описание | Причина | Уровень серьезности |
| - | - | - | - |
| `NAME_NOT_DETECTED` | First name and/or last name not detected | Имя и фамилию не удалось извлечь. Исключение делается, когда у владельца законно только одно имя (страны с мононимами или когда сама MRZ содержит только одно имя) и хотя бы одно значение имени было успешно извлечено. | Настраиваемый — Invalid Validation, по умолчанию Review |
| `DATE_OF_BIRTH_NOT_DETECTED` | Date of birth not detected | Дату рождения не удалось извлечь из документа, в котором она должна присутствовать. | Настраиваемый — Invalid Validation, по умолчанию Review |
| `DOCUMENT_NUMBER_NOT_DETECTED` | Document number not detected | Не удалось извлечь ни номер документа, ни персональный номер. | Настраиваемый — Invalid Validation, по умолчанию Review |
| `EXPIRATION_DATE_NOT_DETECTED` | Expiration date not detected | Срок действия не удалось извлечь из документа, в котором он должен присутствовать. | Настраиваемый — Expiration Date Not Detected, по умолчанию information |
| `INVALID_DATE` | Invalid Date | Дата в документе (дата рождения или срок действия) не распознается как корректная дата. В текущем процессе захвата это проявляется в виде подсказки переснять снимок во время загрузки, а не в виде сохраненного предупреждения; этот код остается в группе маршрутизации Invalid Validation и может появляться в более старых сессиях. | Настраиваемый — Invalid Validation, по умолчанию Review |
| `DOCUMENT_NUMBER_FORMAT_MISMATCH` | Несоответствие формата номера документа | Номер документа не соответствует ожидаемому формату, настроенному для этого типа документа. `additional_data` содержит `expected_format` и `extracted_value`. | Настраиваемая — Format Mismatch, по умолчанию Review |
| `PERSONAL_NUMBER_FORMAT_MISMATCH` | Несоответствие формата личного номера | Личный номер не соответствует ожидаемому формату, настроенному для этого типа документа. | Настраиваемая — Format Mismatch, по умолчанию Review |
| `CRITICAL_FIELD_OCCLUSION_DETECTED` | Критическое поле документа перекрыто | Проверка перекрытия определила, что критическое поле, напечатанное на документе, физически перекрыто на снимке — идентификационный номер, имя, дата рождения или срок действия. Это сигнал нарушения целостности документа, а не качества съемки: перекрытие именно тех номеров, по которым сверяется отчёт, характерно для заретушированного или изменённого документа. Значение, считанное для перекрытого поля, исключается из извлечения, а не возвращается как подтвержденное, поэтому соответствующий риск `*_NOT_DETECTED` обычно сопровождает это предупреждение. `additional_data` содержит имена перекрытых полей в `covered_fields`, а также `covered_identifiers`, если одно из них используется для заполнения `document_number` или `personal_number`. | Настраиваемая — Critical Field Covered, по умолчанию Review |

### MRZ, QR, штрихкод

Все три риска MRZ пропускаются для типов документов с заведомо ненадежными MRZ.

| Риск | Краткое описание | Причина | Серьезность |
| - | - | - | - |
| `MRZ_NOT_DETECTED` | MRZ не обнаружена | Не удалось обнаружить MRZ на документе, где она должна присутствовать. | Настраиваемая — Invalid MRZ, по умолчанию information |
| `MRZ_VALIDATION_FAILED` | MRZ недействительна | MRZ не прошла проверку контрольной суммы или формата. Часто возникает из-за низкого качества снимка; может указывать на подделку. | Настраиваемая — Invalid MRZ, по умолчанию information |
| `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` | Несовпадение данных MRZ и данных, извлеченных OCR | Содержимое MRZ не совпадает с OCR визуальной зоны (VIZ). Возможны изменения в документе. | Настраиваемая — Data Inconsistency, по умолчанию information |
| `QR_NOT_DETECTED` | QR-код не обнаружен | Не удалось обнаружить QR-код на документе, где он должен присутствовать. | Настраиваемая — Invalid Code, по умолчанию information |
| `QR_VALIDATION_FAILED` | Ошибка валидации QR-кода | Не удалось сверить содержимое QR-кода с остальными данными документа. | Настраиваемая — Invalid Code, по умолчанию information |
| `BARCODE_NOT_DETECTED` | Штрихкод не обнаружен | Не удалось обнаружить штрихкод на документе, где он должен присутствовать. | Настраиваемая — Invalid Code, по умолчанию information |
| `BARCODE_VALIDATION_FAILED` | Ошибка валидации штрихкода | Не удалось сверить содержимое штрихкода с остальными данными документа. | Настраиваемая — Invalid Code, по умолчанию information |
| `BARCODE_SIGNATURE_INVALID` | Подпись штрихкода недействительна | Штрихкод содержит цифровую подпись органа выдачи, и эта подпись не прошла проверку - данные в штрихкоде не соответствуют данным, подписанным органом выдачи, что указывает на поддельный или измененный документ. В настоящее время проверка выполняется для штрихкодов **французского стандарта 2D-Doc (ANTS)**, где проверенная подпись позволяет Didit подтверждать поля без необходимости сверки с MRZ; подписи AAMVA (водительские удостоверения и ID США/Канады) только обнаруживаются и записываются в журнал, но пока не учитываются при проверке. | Фиксированная - Review (собственная группа действий `invalid_barcode_signature_action`; пока не настраивается в консоли или через API) |
| `DATA_INCONSISTENT` | Данные OCR в документе противоречивы | Данные, извлеченные из разных частей документа, не совпадают — обычно лицевая и оборотная стороны одного документа. | Настраиваемая — Data Inconsistency, по умолчанию information |

> [!NOTE]
>
> Проверка подписи штрихкода в настоящее время охватывает национальные удостоверения личности Франции, чей штрихкод ANTS 2D-Doc подписан органом выдачи. `BARCODE_SIGNATURE_INVALID` возникает только тогда, когда сама проверка подписи отклоняет payload. Штрихкод без подписи, с подписью органа, еще не входящего в хранилище доверенных сертификатов Didit, или с подписью, которую невозможно декодировать, считается неаутентифицированными данными и валидируется по MRZ и печатному тексту, как и раньше, без формирования этого риска.
>
> Штрихкоды водительских удостоверений США и Канады (AAMVA) не проверяются криптографически: цифровая подпись там является опциональной и зависит от юрисдикции, и ни одна юрисдикция не публикует ключи проверки, поэтому Didit лишь обнаруживает и фиксирует в журнале факт наличия подписи в payload; сама подпись никогда не проверяется. Сбои подписи AAMVA сегодня не служат сигналом риска. Измененный payload AAMVA проявляется только как `BARCODE_VALIDATION_FAILED`, и только если изменение также приводит к расхождению данных штрихкода с MRZ или печатным текстом/OCR - поддельная подпись на внутренне согласованном payload проходит вообще без какого-либо сигнала.
>
> При возникновении `BARCODE_SIGNATURE_INVALID` повторный снимок у пользователя никогда не запрашивается: подпись, не соответствующую payload, нельзя исправить с помощью более качественной фотографии.

### Сопоставление личности

| Риск | Краткое описание | Причина | Серьезность |
| - | - | - | - |
| `ID_DOCUMENT_IN_BLOCKLIST` | Документ, удостоверяющий личность, находится в списке блокировки | Документ совпадает с документом из списка блокировки (та же дата рождения, страна выдачи и точный номер документа) или с номером документа, добавленным в список блокировки вручную. `additional_data` содержит идентификатор сессии из списка блокировки. | `error` — **автоматическое отклонение** |
| `ID_DOCUMENT_IN_ALLOWLIST` | Документ, удостоверяющий личность, находится в списке разрешений | Номер документа входит в список разрешенных документов, поэтому действие для пользователя-дубликата было пропущено. `additional_data` содержит `document_number`. | `information` |
| `POSSIBLE_DUPLICATED_USER` | Возможный дубликат пользователя из другой сессии | Другой документ в вашем приложении имеет ту же дату рождения, ту же страну выдачи и практически совпадающее полное имя — у другого пользователя (`vendor_data`), независимо от статуса той сессии. `additional_data` содержит идентификатор сессии-дубликата. | Настраиваемая — Duplicated User, по умолчанию information |
| `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS` | Имя в документе отличается от других одобренных документов | Имя в этом документе отличается от ранее одобренных документов того же пользователя. Формируется только для аккаунтов Didit-protocol (UserKYC), но не для стандартных API-сессий. | Настраиваемая — Data Inconsistency, по умолчанию information |
| `ID_VERIFICATION_DATA_MISMATCH_BETWEEN_DOCUMENTS` | Несоответствие данных между документами верификации личности | Имя или дата рождения в двух документах, удостоверяющих личность, в рамках одной сессии не совпадают. | Настраивается — Несоответствие данных, по умолчанию information |
| `LOW_FRONT_CAMERA_FACE_MATCH_SIMILARITY` | Селфи при захвате документа не совпадает с портретом в документе | Лицо, захваченное с фронтальной камеры пользователя во время съемки документа, плохо совпадает с портретом в документе. | На основе порогов: `error` ниже порога отклонения, `warning` на уровне порога проверки или ниже него |
| `FRONT_CAMERA_FACE_IN_BLOCKLIST` | Селфи при захвате документа совпадает с лицом из списка блокировки | Лицо на селфи с фронтальной камеры во время захвата документа с высокой уверенностью совпадает с лицом из вашего списка блокировки лиц, независимо от того, было ли оно добавлено из проверки живости, из селфи другой сессии, сделанного при захвате документа, или путем загрузки. Поле `additional_data` содержит ссылку на заблокированную сессию (`blocklisted_session_id`, `blocklisted_session_number`), если лицо из списка блокировки поступило из сессии, и `face_image_source` (`front_image_camera_front` или `back_image_camera_front`) для совпавшего селфи. | `error` — **автоматическое отклонение** |
| `POSSIBLE_FRONT_CAMERA_FACE_IN_BLOCKLIST` | Селфи при захвате документа может совпадать с лицом из списка блокировки | Лицо на селфи при захвате документа похоже на лицо из вашего списка блокировки лиц, но сходство недостаточно велико для подтвержденного совпадения. Те же данные в `additional_data`, что и выше. | `warning` — **всегда Проверка** |
| `FRONT_CAMERA_DUPLICATED_FACE` | Селфи при захвате документа совпадает с одобренным пользователем | Лицо на селфи с фронтальной камеры во время захвата документа с высокой уверенностью совпадает с лицом пользователя, уже одобренного в вашем приложении, поэтому один и тот же человек может проходить верификацию повторно под другой учетной записью. Поле `additional_data` содержит совпавшую сессию (`duplicated_session_id`, `duplicated_session_number`) и `face_image_source` для совпавшего селфи. | Согласно правилу **Дублированное лицо при тихом захвате** (по умолчанию Одобрить, `information`) |
| `POSSIBLE_FRONT_CAMERA_DUPLICATED_FACE` | Селфи при захвате документа может совпадать с одобренным пользователем | Лицо на селфи при захвате документа похоже на лицо пользователя, уже одобренного в вашем приложении, но сходство недостаточно велико для подтвержденного совпадения. Те же данные в `additional_data`, что и выше. | Согласно правилу **Дублированное лицо при тихом захвате** (по умолчанию Одобрить, `information`) |
| `FRONT_CAMERA_DUPLICATED_FACE_NAME_MISMATCH` | Селфи при захвате документа совпадает с пользователем с другим именем | Срабатывает в дополнение к `FRONT_CAMERA_DUPLICATED_FACE`, когда одобренный пользователь прошел верификацию под другим именем. `additional_data` добавляет `name_match_score`; оно никогда не содержит имя другого пользователя. | Согласно правилу **Дублированное лицо при тихом захвате с другим именем** (по умолчанию Проверка, `warning`) |
| `FRONT_CAMERA_DUPLICATED_FACE_DOCUMENT_MISMATCH` | Селфи при захвате документа совпадает с пользователем с другой датой рождения | Срабатывает в дополнение к `FRONT_CAMERA_DUPLICATED_FACE`, когда документ, удостоверяющий личность одобренного пользователя, содержит другую дату рождения. Другой документ того же человека (например, паспорт после ID-карты), обновленный документ или тот же номер документа из той же страны не помечаются. `additional_data` добавляет `mismatch_dimensions` и никогда не содержит данные документа другого пользователя. | Согласно правилу **Дублированное лицо при тихом захвате с другой датой рождения** (по умолчанию Проверка, `warning`) |
| `FRONT_CAMERA_CAPTURED_DOCUMENT` | Фронтальная камера зафиксировала документ, удостоверяющий личность, вместо пользователя | Кадр с фронтальной камеры, сделанный во время сканирования документа, показывает документ, удостоверяющий личность (например, карту, поднесенную к камере), и на нем нет человека. Сравнение селфи при захвате документа для этого кадра не выполняется. | Всегда **Проверка** |

### Проверка живости документа (подделка)

Настраивается на основе порогов для каждого типа мошенничества в сценариях. В автономном OCR API эти три риска безоговорочно отклоняются, а запрошенная проверка, которая не дает пригодной оценки, возвращает `In Review` вместо одобрения.

Сами оценки присутствуют в каждом отчете V3 в виде [`document_liveness`](https://docs.didit.me/ru/core-technology/id-verification/report-id-verification#оценки-проверки-живости-документа), в том числе когда предупреждения не срабатывали, поэтому одобренный документ по-прежнему можно проверить.

| Риск | Краткое описание | Причина | Уровень серьезности |
| - | - | - | - |
| `SCREEN_CAPTURE_DETECTED` | Обнаружен захват документа с экрана | Документ был захвачен с экрана, а не с физического документа. | `error` ниже порога отклонения, `warning` ниже порога проверки, иначе `information` |
| `PRINTED_COPY_DETECTED` | Обнаружена печатная копия документа | Документ, судя по всему, является печатной копией, а не оригиналом. | Та же трехуровневая пороговая схема |
| `PORTRAIT_MANIPULATION_DETECTED` | Обнаружена манипуляция с портретом | Область портрета, судя по всему, была заменена или изменена. | Та же трехуровневая пороговая схема |
| `DOCUMENT_LIVENESS_NOT_COMPUTED` | Не удалось выполнить проверку живости документа | Запрошенная проверка живости документа (на подделку) не вернула пригодной оценки — произошел сбой провайдера, он вернул статус, отличный от 200, или ответил HTTP 200 со значением `status="ERR"`, поэтому документ не был проверен на замену портрета, печатную копию или воспроизведение с экрана. Отсутствие оценки не является доказательством подлинности документа. Только в автономном OCR API. | `warning` + `In Review` (не настраивается; никогда не переопределяет `Declined`) |

### Целостность канала захвата

| Риск | Краткое описание | Причина | Настраивается через | По умолчанию |
| - | - | - | - | - |
| `INJECTION_ATTACK_DETECTED` | Обнаружена инъекционная атака | Кадры были внедрены, а не сняты собственной камерой устройства: кадры передавались программной виртуальной камерой, способной воспроизводить любое видео, видеопотоком камеры, сгенерированным страницей или автоматизацией браузера, перехваченной камерой или средством инструментирования, подключённым к приложению. В `additional_data.reasons` перечислены только причины, подтверждающие это, а `source` имеет значение `capture_integrity`. Это относится как к захвату документа, так и к селфи, сделанному для поиска по ID. | `id_verification_injection_attack_action` | **Отклонить** |

Поле `log_type` отражает настроенное действие: `error` для отклонения, `warning` для проверки, `information` для отсутствия действия.
Рекомендуемое действие: считать отклоненную сессию результатом инъекционного захвата и предложить пользователю повторить попытку на физическом устройстве со встроенной камерой.
Сигналы, которые может сгенерировать реальный человек, никогда не приводят к срабатыванию `INJECTION_ATTACK_DETECTED` и остаются информационными.
Приложения, транслирующие изображение с реальной камеры, например телефон, используемый в качестве веб-камеры, или слой эффектов поверх реальной веб-камеры, не определяются как инъекционные атаки.
Это обнаружение инъекционных атак, которое работает отдельно от обнаружения атак предъявления (предъявление подделки настоящей камере).

### Известные публичные изображения документов

| Риск | Краткое описание | Причина | Серьезность |
| - | - | - | - |
| `PUBLIC_DOCUMENT_IMAGE_DETECTED` | Обнаружено известное публичное изображение документа из интернета | Отправленное изображение документа совпадает с известным общедоступным изображением из интернета (например, образцом, фотографией из прессы или со стока), поэтому оно не может быть фотографией физического документа самого пользователя. Сопоставление использует точные и перцептивные (pHash/dHash) цифровые отпечатки по базе известных публичных изображений документов Didit; объект `additional_data` содержит `match_type` (`exact` или `perceptual`), `source`, `source_url` и `similarity_score` (0-100). | Фиксированная - проверка в сценариях; **автоматическое отклонение** в отдельном API `/id-verification` |

### Несовпадения с ожидаемыми данными

Когда вы передаете `expected_details` в сессию, Didit формирует предупреждение о несовпадении для каждого поля, значение которого не совпало. Одна группа (`expected_details_mismatch_action`, по умолчанию «На проверку») управляет маршрутизацией для всех этих случаев:

| Риск | Краткое описание | Причина |
| - | - | - |
| `FULL_NAME_MISMATCH_WITH_PROVIDED` | Несовпадение полного имени с предоставленной информацией | Оценка совпадения предоставленного имени с документом ниже установленного порога. |
| `DOB_MISMATCH_WITH_PROVIDED` | Несовпадение даты рождения с предоставленной информацией | Предоставленная дата рождения не совпадает. |
| `GENDER_MISMATCH_WITH_PROVIDED` | Несовпадение пола с предоставленной информацией | Предоставленный пол не совпадает. |
| `COUNTRY_MISMATCH_WITH_PROVIDED` | Несовпадение страны с предоставленной информацией | Предоставленная страна не совпадает с `issuing_state`. |
| `NATIONALITY_MISMATCH_WITH_PROVIDED` | Несовпадение гражданства с предоставленной информацией | Предоставленное гражданство не совпадает. |
| `IDENTIFICATION_NUMBER_MISMATCH_WITH_PROVIDED` | Несовпадение идентификационного номера с предоставленной информацией | Предоставленный идентификационный номер не совпадает с номером документа, личным номером или налоговым номером. |

Каждое предупреждение о несовпадении содержит ожидаемые и извлеченные значения в `additional_data`.

### Возраст

| Риск | Краткое описание | Причина | Серьезность |
| - | - | - | - |
| `MINIMUM_AGE_NOT_MET` | Не достигнут минимальный возраст | Владелец младше настроенного минимального возраста (глобального или для конкретной страны/штата). Объект `additional_data` содержит `min_age_allowed` и `user_age`. | Настраиваемая — Минимальный возраст, по умолчанию Отклонить (`error`); безусловное отклонение в отдельном OCR API |
| `MAXIMUM_AGE_EXCEEDED` | Превышен максимальный возраст | Владелец старше настроенного максимального возраста. Объект `additional_data` содержит `max_age_allowed` и `user_age`. | Настраиваемая — Максимальный возраст, по умолчанию Отклонить (`error`) |
| `AGE_NOT_DETECTED` | Возраст не определен | Сценарии адаптивной проверки возраста: не удалось извлечь возраст из документа. | `error` — **автоматическое отклонение** |
| `AGE_BELOW_MINIMUM` | Возраст ниже минимального | Сценарии адаптивной проверки возраста: извлеченный возраст ниже минимального. | `error` — **автоматическое отклонение** |

### Адрес

| Риск | Краткое описание | Причина | Серьезность |
| - | - | - | - |
| `UNPARSED_ADDRESS` | Не удалось определить местоположение адреса | В документе предусмотрено поле адреса, но извлеченный адрес не удалось разобрать или определить его географическое местоположение. | Настраиваемая — Неразобранный адрес, по умолчанию информационное |

## Межсессионные совпадения документов

В дополнение к предупреждениям выше, отчет по верификации личности V3 передает массив `matches[]` — до 5 других документов в вашем приложении с такой же датой рождения, той же страной выдачи и очень похожим полным именем (для документов из списка блокировки дополнительно требуется точное совпадение номера документа), за исключением сессий, принадлежащих тому же пользователю. Документы, добавленные в ваш список блокировки, отображаются с флагом `is_blocklisted: true`. Документы из списка разрешений по-прежнему отображаются в совпадениях, но действие для дублирующегося пользователя по ним пропускается.

Каждое совпадение включает `session_id`, `session_number`, `vendor_data`, `verification_date`, `user_details` (`name`, `document_type`, `document_number`), `status`, `is_blocklisted`, `api_service` и подписанный `front_image_url`.

## Примеры

### Настраиваемое предупреждение при маршрутизации по умолчанию (информационное)

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "QR_NOT_DETECTED",
    "additional_data": null,
    "log_type": "information",
    "short_description": "QR not detected",
    "long_description": "The system couldn't find or read the QR code on the document. This could be due to poor image quality or an unsupported document type.",
    "node_id": "id_primary"
  }
]
```

### Автоматическое отклонение при истекшем сроке действия документа

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "DOCUMENT_EXPIRED",
    "additional_data": null,
    "log_type": "error",
    "short_description": "Document expired",
    "long_description": "The document's expiration date has passed, rendering it no longer valid for use.",
    "node_id": "id_primary"
  }
]
```

### Несовпадение с ожидаемыми данными с payload

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "DOB_MISMATCH_WITH_PROVIDED",
    "additional_data": {
      "expected_dob": "1990-01-01",
      "extracted_dob": "1991-03-15"
    },
    "log_type": "warning",
    "short_description": "Date of birth mismatch with provided information",
    "long_description": "The provided date of birth in `expected_details` doesn't match the date extracted from the document.",
    "node_id": "id_primary"
  }
]
```

## Типы предупреждений

Каждому риску присваивается уровень серьезности на основе конфигурации вашего приложения. Существует три уровня серьезности:

## Связанные материалы

* [Отчет о верификации личности](https://docs.didit.me/ru/core-technology/id-verification/report-id-verification.md) — полная схема отчета и статусы.
* [Мониторинг документов](https://docs.didit.me/ru/core-technology/id-verification/document-monitoring-id-verification.md) — как Didit выявляет несанкционированные изменения и межсессионные дубликаты.
* [Webhooks](https://docs.didit.me/ru/integration/webhooks.md) — событие `session.status.updated` передает предупреждения сразу после завершения шага верификации личности.
* [Модели данных — Верификация личности](https://docs.didit.me/ru/reference/data-models.md#верификация-личности) — каноническая схема полей.
* [Модели данных — Объект предупреждения](https://docs.didit.me/ru/reference/data-models.md#объект-предупреждения) — структура каждого элемента в `warnings[]`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.