> ## 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.

# Предупреждения и коды ошибок NFC-верификации

> Все предупреждения модуля NFC Didit: сбои чтения чипа, несовпадение с OCR, истекшие сертификаты, их причины, критичность и решения.

## Обзор

Предупреждения в отчёте NFC отмечают каждое условие, зафиксированное Didit при чтении и валидации чипа. Они попадают в массив `warnings[]` для каждого элемента `nfc_verifications[]` (см. [Отчёт NFC](https://docs.didit.me/ru/core-technology/nfc-verification/report-nfc-verification.md)) со значением `feature`, установленным в `"NFC"`. Каждая запись соответствует общей структуре [объекта предупреждения](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`** — одно из значений: `information`, `warning` или `error`. Он зависит от действия, настроенного в вашем сценарии для этого риска: **Без действия** → `information`, **Проверка** → `warning`, **Отклонить** → `error`.
3. **Влияние на решение** — то же настроенное действие определяет статус `status` отчёта NFC: действие «Проверка» переводит его в `In Review`, а действие «Отклонить» переводит в `Declined`.

Четыре риска NFC настраиваются таким образом (`SKIPPED_NFC_VALIDATION`, `NFC_CHIP_NOT_VERIFIED`, `NFC_TRUST_ANCHOR_MISSING`, `NFC_AND_OCR_DATA_NOT_SAME`), а также пять рисков для [Japan My Number Card](#японская-карта-my-number-card-jpki), каждый из которых имеет собственную настройку. Два риска сертификатов (`DSC_CERTIFICATE_REVOKED`, `DSC_CERTIFICATE_EXPIRED`) носят **исключительно информационный характер**: они всегда передаются со значением `log_type: "information"` и сами по себе никогда не меняют статус NFC.

Полный набор кодов рисков, генерируемых модулем NFC, приведён ниже. Других кодов рисков NFC не существует.

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

| `risk` | Причина | Серьёзность (`log_type`) | Влияет на статус? | Устранение |
| - | - | - | - | - |
| `SKIPPED_NFC_VALIDATION` | Считывание чипа было пропущено — сценарий разрешает пропуск (`allow_nfc_skip`), и пользователь нажал «пропустить», либо клиент пропустил шаг, так как не смог считать NFC. Точная причина фиксируется в `additional_data.skip_reason` (см. [Причины пропуска](#причины-пропуска)) и определяет `long_description` предупреждения. | Соответствует настройке **действие при пропуске NFC** (`skip_nfc_action`): information / warning / error. | Настраивается — No action, Review или Decline. | Если ваша политика требует NFC, установите действие при пропуске на Decline (или полностью запретите пропуск) и попросите пользователя повторить попытку с устройства с поддержкой NFC. В противном случае оставьте No action, чтобы использовать только OCR-проверку. |
| `NFC_CHIP_NOT_VERIFIED` | Чип был считан, но не прошёл криптографическую проверку по причине, отличной от явно выявленного отсутствия доверенного корня. Хеш группы данных, подпись SOD или другая проверка пассивной аутентификации не прошли проверку. | Соответствует настройке **действие для непроверенного чипа** (`unverified_chip_action`). | Настраивается — No action, Review или Decline. | Рассматривайте как потенциально недействительный или модифицированный чип. Проверьте `authenticity` и `certificate_summary.validation`, чтобы увидеть, какая проверка завершилась ошибкой. |
| `NFC_TRUST_ANCHOR_MISSING` | Сертификат подписанта документа (DSC) чипа относится к генерации сертификационного органа страны (CSCA), которая отсутствует в хранилище доверия Didit (`certificate_summary.validation.csca_missing` имеет значение `true`). В связи с этим Didit не может установить цепочку доверия SOD. | Соответствует настройке **действие для непроверенного чипа** (`unverified_chip_action`). | Настраивается — No action, Review или Decline. | Это пробел в покрытии хранилища доверия, а не доказательство модификации чипа. Проверьте документ с помощью резервных проверок и обратитесь в службу поддержки Didit, указав страну выдачи, чтобы выяснить причину отсутствия CSCA. |
| `NFC_AND_OCR_DATA_NOT_SAME` | MRZ, считанная с чипа, не совпадает с MRZ, распознанной через OCR с видимой стороны документа (сравнение выполняется после нормализации, игнорируя заполнитель `<`). Сильный сигнал о подделке. | Соответствует настройке **действие при несоответствии данных** (`inconsistent_data_action`) — той же настройке, которая управляет проверками согласованности данных в верификации личности. | Настраивается — No action, Review или Decline. | Рассматривайте как подделку, если не доказано обратное; обычно выбирается Decline. payload `additional_data` содержит строки OCR MRZ (`ocr_mrz`, массив) и MRZ чипа (`nfc_mrz`, одна строка) для ручного сравнения. |
| `DSC_CERTIFICATE_REVOKED` | Сертификат подписанта документа (DSC), подписавший этот чип, фигурирует в списке отзыва сертификатов (CRL) страны выдачи. | Всегда `information`. | Нет — сам по себе никогда не меняет статус NFC. | Серьёзный сигнал о возможной компрометации ключа подписи; направляйте такие сессии на ручную проверку с помощью собственной логики при необходимости. Обратите внимание, что для чипа обычно также срабатывает `NFC_CHIP_NOT_VERIFIED`, поведение которого настраивается. |
| `DSC_CERTIFICATE_EXPIRED` | Срок действия DSC истёк (`certificate_summary.validation.dsc_expired` имеет значение `true`). | Всегда `information`. | Нет — сам по себе никогда не меняет статус NFC. | Часто встречается у старых документов. Как и при отзыве, истёкший DSC также не проходит полную валидацию SOD, поэтому вместе с ним срабатывает `NFC_CHIP_NOT_VERIFIED`, который применяет настроенное вами действие. |
| `JPKI_CERTIFICATE_INVALID` | Japan My Number Card: сертификат, считанный с карты, не образует цепочку доверия с удостоверяющим центром JPKI соответствующего типа, находится вне периода действия или не является сертификатом My Number Card этого типа. В `additional_data.certificate_types` перечислены сертификаты, не прошедшие проверку; `jpki.certificates[].failure` поясняет причину. | Соответствует `jpki_certificate_invalid_action` (по умолчанию Decline). | Настраивается: No action, Review или Decline. | Рассматривайте как недействительную или изменённую карту. Истёкший сертификат карты также попадает сюда: владелец продлевает его в своём муниципалитете. |
| `JPKI_SIGNATURE_INVALID` | Japan My Number Card: подпись карты для одноразового запроса не проходит проверку по её сертификату, поэтому владение картой и знание её PIN-кода не подтверждены. Также возникает, если шаг NFC завершился без считывания карты (в этом случае `additional_data.certificate_types` пуст). | Соответствует `jpki_signature_invalid_action` (по умолчанию Decline). | Настраивается: No action, Review или Decline. | Не принимайте считывание карты в качестве подтверждения. Попросите пользователя повторить попытку с физической картой. |
| `JPKI_CERTIFICATE_REVOKED` | Japan My Number Card: проверка отзыва сообщает, что сертификат отозван, например, из-за заявления об утере карты или изменения регистрационных данных владельца (`jpki.revocation_status` имеет значение `revoked`). | Соответствует `jpki_certificate_revoked_action` (по умолчанию Decline). | Настраивается: No action, Review или Decline. | Не принимайте карту. |
| `JPKI_REVOCATION_UNCHECKED` | Japan My Number Card: сертификаты и подпись подтверждены, но ответ об отзыве не был получен (`jpki.revocation_status` имеет значение `unchecked`), поэтому нельзя исключать отзыв карты. Не создаётся, если цепочка или подпись уже не прошли проверку. | Соответствует `jpki_revocation_unchecked_action` (по умолчанию Review). | Настраивается: No action, Review или Decline. | Определите допустимость проверенной карты без ответа об отзыве для вашей системы и настройте действие соответствующим образом. |
| `JPKI_AND_OCR_DATA_NOT_SAME` | Japan My Number Card: имя, дата рождения, пол или адрес в сертификате подписи отличаются от данных, считанных с фотографии этой же карты. В `additional_data.fields` перечислены отличающиеся атрибуты, но никогда не их значения. | Соответствует `jpki_inconsistent_data_action` (по умолчанию Review). | Настраивается: No action, Review или Decline. | Сравните `jpki.attributes` с данными верификации личности перед принятием решения. Имя с необычным символом может отличаться, поскольку сертификат содержит замещающий символ (`jpki.attributes.name_substitute_characters`). |

> [!NOTE]
>
> `SKIPPED_NFC_VALIDATION` и `NFC_CHIP_NOT_VERIFIED`, а также `NFC_TRUST_ANCHOR_MISSING` являются взаимоисключающими: предупреждения о верификации чипа оцениваются только в том случае, если считывание чипа не было пропущено. Эти два предупреждения о верификации чипа также являются взаимоисключающими.

## Точные строки описания

API возвращает следующие точные строки `short_description` и `long_description` для каждого риска:

| `risk` | `short_description` | `long_description` |
| - | - | - |
| `SKIPPED_NFC_VALIDATION` | Валидация NFC пропущена | Зависит от конкретной причины — см. [Причины пропуска](#причины-пропуска). Для устаревших сессий, записанных до появления причин пропуска, возвращается «Процесс валидации чипа Near Field Communication (NFC) не был завершён, возможно, из-за технических проблем или отсутствия поддержки NFC.» |
| `NFC_CHIP_NOT_VERIFIED` | NFC-чип не верифицирован | Чип Near Field Communication (NFC) не прошёл пассивную аутентификацию по причине, отличной от явно выявленного отсутствия якоря доверия. Данные чипа или подпись могут быть недействительными или изменёнными. |
| `NFC_TRUST_ANCHOR_MISSING` | Якорь доверия NFC недоступен | Чип Near Field Communication (NFC) не удалось верифицировать, поскольку якорь доверия центра сертификации подписей страны выдачи (CSCA) недоступен. Это пробел в покрытии хранилища доверия, а не свидетельство изменения чипа. |
| `NFC_AND_OCR_DATA_NOT_SAME` | Данные NFC и OCR не совпадают | Данные чипа Near Field Communication (NFC) и данные OCR не совпадают, что указывает на возможную подделку документа или несоответствие данных. |
| `DSC_CERTIFICATE_REVOKED` | Сертификат подписанта документа отозван | Сертификат подписанта документа (DSC), использованный для подписи данных чипа электронного паспорта, был отозван списком отзыва сертификатов (CRL) страны выдачи, что указывает на возможную компрометацию ключа подписи. |
| `DSC_CERTIFICATE_EXPIRED` | Срок действия сертификата подписанта документа истёк | Срок действия сертификата подписанта документа (DSC), использованного для подписи данных чипа электронного паспорта, истёк, то есть период действия сертификата прошёл. |
| `JPKI_CERTIFICATE_INVALID` | Сертификат My Number Card недействителен | Сертификат, считанный с чипа My Number Card, недействителен: он не выстраивает цепочку доверия к центру сертификации японской инфраструктуры открытых ключей (JPKI), находится вне периода своего действия или не является сертификатом My Number Card запрошенного типа. |
| `JPKI_SIGNATURE_INVALID` | Подпись My Number Card недействительна | Подпись, сформированная My Number Card для одноразового проверочного запроса, не проходит проверку по сертификату карты, поэтому владение картой и знание её PIN-кода не подтверждены. |
| `JPKI_CERTIFICATE_REVOKED` | Сертификат My Number Card отозван | Проверка отзыва сообщает, что сертификат, считанный с My Number Card, был отозван, например из-за сообщения об утере карты или изменения регистрационных данных владельца. |
| `JPKI_REVOCATION_UNCHECKED` | Статус отзыва My Number Card не проверен | Сертификат и подпись My Number Card были верифицированы, однако статус отзыва проверить не удалось, поэтому нельзя исключить, что карта отозвана. |
| `JPKI_AND_OCR_DATA_NOT_SAME` | Данные чипа My Number Card и OCR не совпадают | Имя, дата рождения, пол или адрес в сертификате подписи My Number Card не совпадают с данными, считанными с изображения карты (OCR), что указывает на возможную подмену или несоответствие данных. |

## Причины пропуска

Предупреждения `SKIPPED_NFC_VALIDATION` содержат `additional_data.skip_reason` — один из семи стабильных кодов, указывающих точную причину, по которой NFC-проверка не выполнялась (в сессиях, записанных до появления причин пропуска, `additional_data` может иметь значение `null` — обрабатывайте это поле как необязательное при обработке исторических решений). Та же классификация представлена на уровне сессии в виде `nfc_skip_reason` в payload решения — в том числе для сессий, где NFC в принципе не мог выполниться (документ без чипа, веб-интеграция) и, следовательно, отчёт или предупреждение по NFC отсутствуют.

| `skip_reason` | Значение | `long_description` |
| - | - | - |
| `USER_SKIPPED` | NFC был предложен на совместимом устройстве, и пользователь решил его пропустить. | Шаг считывания чипа NFC был предложен на совместимом устройстве, но пользователь решил пропустить его (пропуск разрешён конфигурацией сценария). |
| `DOCUMENT_WITHOUT_CHIP` | Формат документа не предусматривает считываемого чипа NFC (документ не является электронным документом по стандарту ICAO 9303). | NFC-верификацию не удалось выполнить, так как в этом документе нет считываемого чипа NFC: он не является электронным документом ICAO 9303. |
| `CHIP_CERTIFICATE_UNAVAILABLE` | Чип присутствует, но сертификат подписи страны выдачи (CSCA) не охватывает период выдачи документа, поэтому подпись невозможно проверить. | NFC-верификацию не удалось выполнить, поскольку сертификат подписи страны выдачи (CSCA), покрывающий период выдачи этого документа, недоступен, поэтому подпись чипа не может быть проверена. |
| `DEVICE_WITHOUT_NFC` | Нативный SDK сообщил, что на телефоне нет доступного NFC-модуля. | NFC-верификацию не удалось выполнить, так как устройство пользователя сообщило об отсутствии доступного NFC-модуля. |
| `INTEGRATION_WITHOUT_NFC_ACCESS` | Верификация выполнялась без нативного SDK (например, в веб-браузере), не имеющего доступа к NFC-модулю телефона. | NFC-верификацию не удалось выполнить, поскольку верификация запускалась не через нативный мобильный SDK, поэтому доступ к NFC-модулю телефона отсутствовал (веб-браузеры не могут считывать NFC-чипы). |
| `MRZ_KEY_UNAVAILABLE` | Ключ доступа к чипу (seed для BAC/PACE) не удалось извлечь из MRZ документа. | NFC-верификацию не удалось выполнить, так как ключ доступа к чипу не удалось получить из машиносчитываемой зоны (MRZ) документа. |
| `JPKI_UNAVAILABLE` | Документ является японской картой My Number Card, чип которой считывается через JPKI, и JPKI был недоступен для этой верификации: он не включён или релиз нативного SDK приложения не поддерживает считывание карт My Number Card. Для карты My Number Card, верифицируемой в браузере, указывается причина `INTEGRATION_WITHOUT_NFC_ACCESS`, а для карты на телефоне без NFC — `DEVICE_WITHOUT_NFC`, как и для любого чипа. | NFC-верификацию не удалось выполнить, поскольку эта карта My Number Card считывается через JPKI, который был недоступен для данной верификации: он не включён или SDK приложения не поддерживает считывание карт My Number Card. |

> [!NOTE]
>
> Отчёт по NFC и соответствующее предупреждение `SKIPPED_NFC_VALIDATION` создаются только тогда, когда клиент дошёл до шага NFC и явно пропустил его (обычно это `USER_SKIPPED` или `DEVICE_WITHOUT_NFC`, если считыватель оказался недоступен в момент сканирования). Если шаг NFC был пропущен ещё до того, как его удалось предложить (документ без чипа, отсутствие сертификата, отсутствие поддержки NFC, нечитаемый ключ MRZ, недоступность JPKI), отчёт и предупреждение не формируются, а причина отображается только в поле уровня сессии `nfc_skip_reason`, не влияя на статус сессии.

## Конфигурация

Три настройки сценария определяют маршрутизацию предупреждений NFC. Каждая может принимать значение **Без действия**, **Проверка** или **Отклонить**:

1. **Действие при пропуске NFC** (`skip_nfc_action`) — применяется к `SKIPPED_NFC_VALIDATION`. Пропуск предлагается пользователям, только если включён параметр `allow_nfc_skip`.
2. **Действие при непроверенном чипе** (`unverified_chip_action`) — применяется как к `NFC_CHIP_NOT_VERIFIED`, так и к `NFC_TRUST_ANCHOR_MISSING`, благодаря чему логика изменения статуса сессии остаётся одинаковой, а код риска поясняет причину сбоя проверки.
3. **Действие при несовпадении данных** (`inconsistent_data_action`) — применяется к `NFC_AND_OCR_DATA_NOT_SAME`. Это та же настройка несоответствия данных, которая используется в верификации личности.

Для двух рисков `DSC_CERTIFICATE_*` настройка действия отсутствует — они всегда носят исключительно информационный характер. Для рисков, связанных с японской картой My Number Card, предусмотрены ещё пять настроек, перечисленных в следующем разделе.

## Японская карта My Number Card (JPKI)

Японская карта My Number Card считывается через JPKI вместо ICAO 9303 (`chip_protocol: "jpki"`), поэтому описанные выше риски ICAO к ней никогда не применяются. Вместо этого при её считывании могут возникнуть следующие пять рисков, для каждого из которых в узле NFC предусмотрена отдельная настройка:

| Параметр | Риск | По умолчанию |
| - | - | - |
| `jpki_certificate_invalid_action` | `JPKI_CERTIFICATE_INVALID` | Отклонить |
| `jpki_signature_invalid_action` | `JPKI_SIGNATURE_INVALID` | Отклонить |
| `jpki_certificate_revoked_action` | `JPKI_CERTIFICATE_REVOKED` | Отклонить |
| `jpki_revocation_unchecked_action` | `JPKI_REVOCATION_UNCHECKED` | Проверка |
| `jpki_inconsistent_data_action` | `JPKI_AND_OCR_DATA_NOT_SAME` | Проверка |

Пропуск считывания карты My Number Card вызывает `SKIPPED_NFC_VALIDATION` и обрабатывается в соответствии с `skip_nfc_action`, как и любой другой чип. Подробнее о процессе считывания см. в разделе [Японская карта My Number Card (JPKI)](https://docs.didit.me/ru/core-technology/nfc-verification/overview.md#карта-my-number-в-японии-jpki).

> [!WARNING]
>
> Считывание карт My Number Card через JPKI пока не включено в продакшне. До его активации карта My Number Card пропускает шаг NFC с причиной пропуска `JPKI_UNAVAILABLE`, и ни один из этих рисков не генерируется.

## Примеры

### На проверке — чип не удалось верифицировать

```json theme={null}
{
  "warnings": [
  {
    "feature": "NFC",
    "risk": "NFC_CHIP_NOT_VERIFIED",
    "additional_data": null,
    "log_type": "warning",
    "short_description": "NFC chip not verified",
    "long_description": "The Near Field Communication (NFC) chip failed passive authentication for a reason other than an explicitly identified missing trust anchor. The chip data or signature could be invalid or altered.",
    "node_id": "nfc_primary"
  },
  {
    "feature": "NFC",
    "risk": "DSC_CERTIFICATE_EXPIRED",
    "additional_data": null,
    "log_type": "information",
    "short_description": "Document Signer Certificate expired",
    "long_description": "The Document Signer Certificate (DSC) used to sign the ePassport chip data has expired, meaning the certificate's validity period has passed.",
    "node_id": "nfc_primary"
  }
]
}
```

Здесь действие при неверифицированном чипе настроено на Review, поэтому `NFC_CHIP_NOT_VERIFIED` содержит `log_type: "warning"`, а статус NFC-отчёта имеет значение `In Review`. Запись об истекшем DSC носит чисто информационный характер.

### Отклонена — несоответствие между чипом и OCR

```json theme={null}
{
  "warnings": [
  {
    "feature": "NFC",
    "risk": "NFC_AND_OCR_DATA_NOT_SAME",
    "additional_data": {
      "ocr_mrz": ["P<ESPDOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", "AAB000123ESP9005154M3001017<<<<<<<<<<<<<<04"],
      "nfc_mrz": "P<ESPDOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<<<<AAB000254ESP9005154M3001017<<<<<<<<<<<<<<06"
    },
    "log_type": "error",
    "short_description": "NFC and OCR data not same",
    "long_description": "The Near Field Communication (NFC) chip data and the OCR data don't match, indicating potential document tampering or data inconsistency.",
    "node_id": "nfc_primary"
  }
]
}
```

Здесь действие при несоответствии данных настроено на Decline, поэтому предупреждение содержит `log_type: "error"`, а статус NFC-отчёта имеет значение `Declined`. Обратите внимание, что `ocr_mrz` представляет собой массив строк MRZ, тогда как `nfc_mrz` является единой объединённой строкой MRZ с чипа.

### На проверке: My Number Card без ответа об отзыве

```json theme={null}
{
  "warnings": [
  {
    "feature": "NFC",
    "risk": "JPKI_REVOCATION_UNCHECKED",
    "additional_data": null,
    "log_type": "warning",
    "short_description": "My Number Card revocation status not checked",
    "long_description": "The certificate and signature of the My Number Card were verified, but its revocation status could not be checked, so a revoked card cannot be ruled out.",
    "node_id": "nfc_primary"
  }
]
}
```

Здесь `jpki_revocation_unchecked_action` сохраняет значение по умолчанию, Review, поэтому предупреждение содержит `log_type: "warning"`, а статус NFC-отчёта имеет значение `In Review`. Сама карта была подтверждена: и `jpki.chain_valid`, и `jpki.signature_valid` имеют значение `true`.

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

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

## Связанные разделы

* [NFC-отчёт](https://docs.didit.me/ru/core-technology/nfc-verification/report-nfc-verification.md) — полная схема отчёта и статусы.
* [webhook](https://docs.didit.me/ru/integration/webhooks.md) — `status.updated` срабатывает при изменении статуса сессии; payload решения (включая предупреждения NFC) прикрепляется, когда сессия переходит в статус Approved, Declined, In Review или Abandoned.
* [Модели данных — NFC-верификация](https://docs.didit.me/ru/reference/data-models.md#nfc-верификация) — каноническая схема с описанием каждого поля.
* [Модели данных — Объект предупреждения](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.