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

# Verificación de ID: advertencias y códigos de error

> Advertencias de verificación de ID de Didit: rechazo automático, riesgos configurables y códigos de discrepancia y manipulación, con causa y solución.

## Descripción general

Las advertencias del informe de verificación de identidad señalan cada condición que Didit observó al leer y validar el documento. Se incluyen en el array `warnings[]` de cada elemento de `id_verifications[]` (consulta [Informe de verificación de identidad](https://docs.didit.me/es/core-technology/id-verification/report-id-verification.md)), con la estructura descrita en [Modelos de datos: objeto Warning](https://docs.didit.me/es/reference/data-models.md#objeto-de-advertencia): `feature`, `risk`, `additional_data`, `log_type`, `short_description`, `long_description`, `node_id`.

Cada advertencia tiene tres capas:

1. **El código `risk`**: un identificador estable que puedes comprobar en tu código.
2. **El `log_type`**: se deriva de la acción que tu configuración asigna al riesgo en el momento de la evaluación: **Rechazar → `error`**, **Revisión → `warning`**, cualquier otra → `information`.
3. **El impacto en la decisión**: lo determinan los grupos de riesgo configurables del flujo de verificación (workflow). El mismo código `risk` puede asignarse a **Aprobar**, **Revisión** o **Rechazar** según cómo esté configurada tu aplicación.

## Condiciones de rechazo automático

En los flujos, los siguientes riesgos siempre fuerzan el informe de identidad (y la sesión) a `Declined`. No se pueden configurar:

| Riesgo | Disparador |
| - | - |
| `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` | El tipo de documento enviado no está en la lista de documentos permitidos de tu aplicación. `additional_data` incluye `issuing_state`, `document_type`, `document_subtype`, `document_region` y `document_region_with_subtype` para que puedas habilitar el documento exacto en tu flujo. |
| `DOCUMENT_EXPIRED` | La fecha de caducidad del documento ya había pasado en el momento de la captura. |
| `PORTRAIT_IMAGE_NOT_DETECTED` | No se pudo localizar ninguna foto del titular en el documento. |
| `ID_DOCUMENT_IN_BLOCKLIST` | El documento coincide con una entrada de la lista de bloqueo de tu aplicación. |
| `FRONT_CAMERA_FACE_IN_BLOCKLIST` | La selfie tomada con la cámara frontal durante la captura del documento coincide con un rostro de tu lista de bloqueo facial. |
| `AGE_BELOW_MINIMUM` | Solo en flujos de verificación de edad adaptativa: la edad extraída es inferior a la mínima. |
| `AGE_NOT_DETECTED` | Solo en flujos de verificación de edad adaptativa: no se pudo extraer la edad del documento. |

En la **API de OCR independiente**, el conjunto de rechazo incondicional es `DOCUMENT_EXPIRED`, `MINIMUM_AGE_NOT_MET`, `PORTRAIT_IMAGE_NOT_DETECTED`, `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED` y `PUBLIC_DOCUMENT_IMAGE_DETECTED`. En los flujos, la edad mínima es configurable (Rechazar por defecto) y los tres riesgos de prueba de vida del documento dependen de umbrales (ver más abajo).

Los riesgos configurables de esa API admiten `DECLINE` o `NO_ACTION` en lugar de un veredicto de Revisión, como parámetros de la solicitud. El único resultado de Revisión que puede devolver no es configurable: cuando una comprobación de prueba de vida del documento solicitada no produce una puntuación utilizable, la respuesta es `In Review` con una advertencia `DOCUMENT_LIVENESS_NOT_COMPUTED` (consulta [Prueba de vida del documento](#prueba-de-vida-del-documento-manipulación)).

| Parámetro de la solicitud | Riesgos | Valor por defecto |
| - | - | - |
| `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` |

## Configuración de verificación ajustable

En la consola de Didit, los demás riesgos de identidad se agrupan en ajustes que puedes dirigir a **Aprobar**, **Revisión** o **Rechazar** (por flujo y, en los flujos de grafo, por nodo):

| Grupo | Riesgos | Acción predeterminada |
| - | - | - |
| **Edad mínima** | `MINIMUM_AGE_NOT_MET` | Rechazar |
| **Edad máxima** | `MAXIMUM_AGE_EXCEEDED` | Rechazar |
| **Usuario duplicado** | `POSSIBLE_DUPLICATED_USER` (se omite cuando el número de documento está en tu lista de documentos permitidos) | Aprobar (información) |
| **Código no válido** | `QR_NOT_DETECTED`, `BARCODE_NOT_DETECTED`, `QR_VALIDATION_FAILED`, `BARCODE_VALIDATION_FAILED` | Aprobar (información) |
| **MRZ no válido** | `MRZ_VALIDATION_FAILED`, `MRZ_NOT_DETECTED` | Aprobar (información) |
| **Inconsistencia de datos** | `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` | Aprobar (información) |
| **Validación no válida** | `INVALID_DATE`, `COULD_NOT_RECOGNIZE_DOCUMENT`, `DOCUMENT_NUMBER_NOT_DETECTED`, `COULD_NOT_DETECT_DOCUMENT_TYPE`, `NAME_NOT_DETECTED`, `DATE_OF_BIRTH_NOT_DETECTED` | Revisión |
| **Discrepancia en los datos esperados** | `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` | Revisión |
| **Fecha de caducidad no detectada** | `EXPIRATION_DATE_NOT_DETECTED` | Aprobar (información) |
| **Discrepancia de formato en el número de documento o personal** | `DOCUMENT_NUMBER_FORMAT_MISMATCH`, `PERSONAL_NUMBER_FORMAT_MISMATCH` (una acción compartida) | Revisión |
| **Campo crítico cubierto** | `CRITICAL_FIELD_OCCLUSION_DETECTED` | Revisión |
| **Dirección no analizada** | `UNPARSED_ADDRESS` | Aprobar (información) |
| **Calidad de imagen** | `IMAGE_TOO_BLURRY`, `IMAGE_TOO_DARK`, `IMAGE_TOO_BRIGHT` (una acción por riesgo) | Aprobar (información) |
| **Documento sin retrato** | `DOCUMENT_HAS_NO_PORTRAIT` | Revisión |
| **Rostro duplicado en la captura silenciosa** | `FRONT_CAMERA_DUPLICATED_FACE`, `POSSIBLE_FRONT_CAMERA_DUPLICATED_FACE` (una acción compartida) | Aprobar (información) |
| **Duplicado en captura silenciosa con nombre diferente** | `FRONT_CAMERA_DUPLICATED_FACE_NAME_MISMATCH` (solo puede hacer más estricto el resultado del rostro duplicado) | Revisión |
| **Duplicado en captura silenciosa con fecha de nacimiento diferente** | `FRONT_CAMERA_DUPLICATED_FACE_DOCUMENT_MISMATCH` (solo puede hacer más estricto el resultado del rostro duplicado) | Revisión |

Los riesgos de duplicado y de lista de bloqueo de la captura silenciosa provienen de la [Búsqueda facial sobre la selfie tomada durante la captura del documento](https://docs.didit.me/es/core-technology/face-search/overview.md#el-selfie-tomado-durante-la-captura-del-documento). La búsqueda se ejecuta mientras **Búsqueda facial con captura silenciosa** (`document_selfie_face_search_enabled`) está activada, que es el valor predeterminado, y la Búsqueda facial no está desactivada en el paso de Prueba de vida; de lo contrario, no se genera ninguno de estos seis riesgos.

Dos familias de riesgos de identidad están **basadas en umbrales** en lugar de usar los selectores Aprobar/Revisión/Rechazar:

* **Prueba de vida del documento**: `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED`. Cada tipo de fraude tiene sus propios umbrales de rechazo y de revisión: una puntuación por debajo del umbral de rechazo → `error` + Rechazado; por debajo del umbral de revisión → `warning` + En revisión; en cualquier otro caso, `information`.
* **Coincidencia facial entre cámaras**: `LOW_FRONT_CAMERA_FACE_MATCH_SIMILARITY`, regida por `document_selfie_portrait_match_decline_threshold` / `document_selfie_portrait_match_review_threshold`.

### Configurar los umbrales de prueba de vida del documento

En el editor de flujos, estos umbrales se encuentran en la pestaña **Falsificación** del paso de Verificación de identidad, con una tarjeta por tipo de fraude: **Sustitución del retrato**, **Copia impresa** y **Captura de pantalla**.

Cada comprobación asigna al documento una puntuación de `0` a `100` según lo auténtico que parezca. **Una puntuación más alta significa que es más probable que el documento sea auténtico.** Los dos valores de una tarjeta dividen esa escala en tres franjas:

| Puntuación | Resultado |
| - | - |
| Por debajo del valor de **Rechazar** | `error`, la sesión se rechaza |
| Igual o superior al valor de **Rechazar** e inferior al valor de **Revisión** | `warning`, la sesión pasa a En revisión |
| Igual o superior al valor de **Revisión** | `information`, la comprobación se supera |

Subir cualquiera de los dos valores hace la comprobación más estricta: más sesiones caen en la franja de resultado más estricto correspondiente. Bajar un valor deja pasar más sesiones. En el editor, el valor de Rechazar no puede superar el valor de Revisión. A través de la API, un valor de Rechazar superior al de Revisión elimina la franja En revisión.

Valores predeterminados de la plataforma, que se usan cuando un flujo no define un valor:

| Tipo de fraude | Rechazar por debajo de | Revisión por debajo de | Claves de configuración del flujo |
| - | - | - | - |
| Sustitución del retrato | `35` | `70` | `document_liveness_portrait_replace_decline_threshold`, `document_liveness_portrait_replace_review_threshold` |
| Copia impresa | `35` | `77` | `document_liveness_printed_copy_decline_threshold`, `document_liveness_printed_copy_review_threshold` |
| Captura de pantalla | `30` | `70` | `document_liveness_screen_replay_decline_threshold`, `document_liveness_screen_replay_review_threshold` |

Parte de los valores predeterminados y cambia un valor cada vez. Cada tarjeta muestra su valor predeterminado y un botón **Restablecer valores predeterminados**, para que siempre puedas volver a él. El editor también te advierte sobre estas configuraciones:

* **Revisión en `100`.** Solo una puntuación perfecta supera la comprobación, así que casi todas las sesiones pasan a En revisión o se rechazan.
* **Rechazar en `100`.** Solo una puntuación perfecta evita el rechazo, así que casi todas las sesiones se rechazan.
* **Ambos valores en `0`.** Nunca se marca ninguna puntuación, así que la comprobación queda desactivada en la práctica.

Asignar el mismo número a ambos valores elimina la franja En revisión: una puntuación inferior a ese número se rechaza y cualquier otra supera la comprobación.

Cuando tanto **Copia impresa** como **Captura de pantalla** marcarían el mismo documento, solo se informa de `SCREEN_CAPTURE_DETECTED`.

La coincidencia facial entre cámaras sigue la misma lógica con una diferencia en el límite: una puntuación igual a su umbral de revisión también pasa a En revisión.

Cuatro riesgos de la verificación de identidad no son configurables ni dependen de un umbral. `POSSIBLE_FRONT_CAMERA_FACE_IN_BLOCKLIST` siempre se envía a **Revisión**: una selfie parecida a un rostro de la lista de bloqueo, sin llegar a ser una coincidencia confirmada, debe valorarla una persona, nunca se rechaza automáticamente y nunca se ignora. `BARCODE_SIGNATURE_INVALID` siempre se envía a **Revisión**. Solo se activa cuando un código de barras lleva una firma de la autoridad emisora que no supera la verificación criptográfica, así que no existe ninguna configuración en la que se ignore una falsificación demostrada. `DOCUMENT_BACK_SIDE_NOT_AVAILABLE` siempre es **información** y nunca afecta a la decisión: indica una limitación del catálogo de documentos de Didit, no una propiedad del documento presentado, así que no existe ninguna configuración en la que pueda rechazar a un titular legítimo o enviarlo a revisión.
`FRONT_CAMERA_CAPTURED_DOCUMENT` siempre se envía a **Revisión**.
Solo se activa cuando el fotograma de la cámara frontal tomado mientras se escanea el documento muestra un documento de identidad y ninguna persona, de modo que una captura que no dice nada sobre quién sostenía el documento siempre se somete a revisión humana.
Se comprueba siempre que está activada la coincidencia entre la selfie y la captura del documento (`is_document_selfie_portrait_match_enabled`).

## Advertencias generadas

Comprobado con `collect_ocr_logs`, el flujo de captura de documentos y `process_ocr_logs_and_get_status`. Las descripciones breves que aparecen a continuación son las cadenas `short_description` exactas que devuelve la API.

### Reconocimiento y calidad del documento

| Riesgo | Descripción breve | Causa | Gravedad |
| - | - | - | - |
| `COULD_NOT_RECOGNIZE_DOCUMENT` | Could not validate Document | El sistema no pudo confirmar la autenticidad o la validez del documento enviado, a menudo por una calidad de imagen deficiente o un tipo de documento no admitido. También se usa como valor por defecto para fallos de procesamiento no reconocidos. | Configurable: Invalid Validation, por defecto Review |
| `COULD_NOT_DETECT_DOCUMENT_TYPE` | Could not detect document type | El anverso del documento no coincide con alta confianza con ningún diseño de documento oficial conocido, o el motor de OCR no pudo clasificar la familia del documento (pasaporte, documento de identidad o licencia de conducir). Aquí terminan los documentos que contienen datos válidos pero cuyo diseño no coincide con ningún diseño oficial (un documento editado o generado por computadora, o un diseño nuevo que aún no se admite). Cuando se activa, se suprime `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` (el tipo es desconocido, así que "no admitido" sería contradictorio). | Configurable: Invalid Validation, por defecto Review |
| `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` | Document not supported for your application | El tipo de documento reconocido no está en la lista de documentos permitidos de la aplicación. `additional_data` incluye el país, el tipo de documento, el subtipo y el subtipo según la región. | `error`: **rechazo automático** |
| `DOCUMENT_EXPIRED` | Document expired | En el momento de la captura: la fecha de caducidad del documento ya pasó (`error`, rechazo automático). Tras la aprobación: la monitorización continua de caducidad añade esta advertencia con `log_type: "warning"` cuando vence la fecha de un documento aprobado, y el estado del informe pasa a `Expired`. | `error` en la captura; `warning` desde la monitorización |
| `DOCUMENT_SIDES_MISMATCH` | Document sides mismatch | Las imágenes del anverso y del reverso no pertenecen al mismo documento. | Configurable: Data Inconsistency, por defecto information |
| `DOCUMENT_BACK_SIDE_NOT_AVAILABLE` | Back side not available for this document | El flujo solicitó ambas caras, el anverso se reconoció y el catálogo de documentos de Didit no registra reverso para ese documento concreto, por lo que solo se pudo recopilar el anverso. La evidencia del informe es de una sola cara. El documento presentado no tiene ningún problema, nunca se pide al titular que repita la captura y volver a escanearlo no puede añadir un reverso. `additional_data` incluye el `front_document_name` reconocido. | `information`: nunca afecta a la decisión |
| `PORTRAIT_IMAGE_NOT_DETECTED` | Portrait image not detected | No se pudo localizar la foto del titular en un documento que debería tenerla (la comprobación se aplaza cuando el usuario sube primero la cara sin foto). | `error`: **rechazo automático** |
| `DOCUMENT_HAS_NO_PORTRAIT` | Document has no portrait | La familia de documentos reconocida nunca lleva foto del titular en ninguna de sus caras (algunos permisos de residencia, tarjetas sanitarias, certificados de registro, tarjetas fiscales y una parte de las licencias de conducir y documentos de identidad). Es una característica del tipo de documento recogida en el catálogo, no un problema de calidad de imagen: volver a escanear el documento no puede cambiar el resultado. | Configurable: Document Without Portrait, por defecto Review |
| `IMAGE_TOO_BLURRY` / `IMAGE_TOO_DARK` / `IMAGE_TOO_BRIGHT` | Document image is too blurry / too dark / too bright | El control de calidad de imagen rechazó una subida (se pide al usuario que repita la captura). `additional_data` incluye la `side` que falló. Una nueva captura exitosa elimina la advertencia obsoleta; el control se omite en el último intento permitido del usuario para que nunca quede bloqueado sin salida. | Configurable: acción de Image Quality por riesgo, por defecto information |

> [!NOTE]
>
> El flujo de captura también puede rechazar una subida con los códigos de respuesta `IMAGE_RESOLUTION_TOO_LOW`, `DOCUMENT_NOT_FULLY_VISIBLE`, `IMAGE_QUALITY_TOO_LOW` y `DOCUMENT_OCCLUSION_DETECTED` (se considera que un dedo o un objeto tapa físicamente el texto impreso). Cada uno solicita una nueva captura en el SDK y queda registrado en el informe como un riesgo propio, gestionado según la configuración de Image Quality; `DOCUMENT_OCCLUSION_DETECTED` e `IMAGE_QUALITY_TOO_LOW` comparten una misma acción. Describen la *captura*: una nueva captura exitosa elimina la advertencia. Si un campo tapado debe afectar a la decisión lo determina por separado `CRITICAL_FIELD_OCCLUSION_DETECTED`, del lado de la integridad (ver más abajo), que se genera en el momento de la decisión y tiene Review por defecto.

> [!TIP]
>
> Si tu flujo basa la identidad en la coincidencia facial y no en la foto del documento, considera asignar Decline a **Document Without Portrait**; de lo contrario, una familia de documentos sin foto llega a la coincidencia facial sin nada con qué comparar.

### Extracción de campos

| Riesgo | Descripción breve | Causa | Gravedad |
| - | - | - | - |
| `NAME_NOT_DETECTED` | First name and/or last name not detected | No se pudieron extraer el nombre ni los apellidos. Queda exento cuando el titular tiene legítimamente un solo nombre (países con nombre único, o cuando la propia MRZ contiene un solo nombre) y se extrajo al menos un valor de nombre. | Configurable: Invalid Validation, por defecto Review |
| `DATE_OF_BIRTH_NOT_DETECTED` | Date of birth not detected | No se pudo extraer la fecha de nacimiento de un documento que debería tenerla. | Configurable: Invalid Validation, por defecto Review |
| `DOCUMENT_NUMBER_NOT_DETECTED` | Document number not detected | No se pudo extraer ni el número de documento ni un número personal. | Configurable: Invalid Validation, por defecto Review |
| `EXPIRATION_DATE_NOT_DETECTED` | Expiration date not detected | No se pudo extraer la fecha de caducidad de un documento que debería tenerla. | Configurable: Expiration Date Not Detected, por defecto information |
| `INVALID_DATE` | Invalid Date | Una fecha del documento (fecha de nacimiento o de caducidad) no se puede interpretar como una fecha válida. En el flujo de captura actual, esto aparece como una solicitud de nueva captura durante la subida en lugar de como una advertencia almacenada; el código sigue en el grupo de gestión Invalid Validation y puede aparecer en sesiones antiguas. | Configurable: Invalid Validation, por defecto Review |
| `DOCUMENT_NUMBER_FORMAT_MISMATCH` | El formato del número de documento no coincide | El número de documento no coincide con el formato esperado configurado para este tipo de documento. `additional_data` incluye `expected_format` y `extracted_value`. | Configurable — Format Mismatch, por defecto Revisión |
| `PERSONAL_NUMBER_FORMAT_MISMATCH` | El formato del número personal no coincide | El número personal no coincide con el formato esperado configurado para este tipo de documento. | Configurable — Format Mismatch, por defecto Revisión |
| `CRITICAL_FIELD_OCCLUSION_DETECTED` | Un campo crítico del documento está cubierto | La comprobación de oclusión detectó que un campo impreso crítico estaba cubierto físicamente en la captura: un número de identidad, un nombre, la fecha de nacimiento o la fecha de caducidad. Es una señal de integridad del documento, no de calidad de captura: cubrir precisamente los números con los que se concilia un informe es lo que caracteriza a un documento censurado o manipulado. El valor leído de un campo cubierto se descarta de la extracción en lugar de devolverse como confirmado, por lo que el riesgo `*_NOT_DETECTED` correspondiente suele acompañar a esta advertencia. `additional_data` incluye los nombres de los campos cubiertos en `covered_fields`, y `covered_identifiers` cuando uno de ellos alimenta `document_number` o `personal_number`. | Configurable — Critical Field Covered, por defecto Revisión |

### MRZ, QR, código de barras

Los tres riesgos de MRZ se omiten para los tipos de documento cuya MRZ se sabe que no es fiable.

| Riesgo | Descripción breve | Causa | Gravedad |
| - | - | - | - |
| `MRZ_NOT_DETECTED` | MRZ no detectada | No se pudo localizar la MRZ en un documento que debería tenerla. | Configurable — Invalid MRZ, por defecto información |
| `MRZ_VALIDATION_FAILED` | La MRZ no es válida | La MRZ no superó la validación de dígitos de control o de formato. Suele deberse a una captura de baja calidad; puede indicar manipulación. | Configurable — Invalid MRZ, por defecto información |
| `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` | La MRZ y los datos extraídos por OCR presentan discrepancias | El contenido de la MRZ no coincide con el OCR de la VIZ (zona visible). Posible alteración. | Configurable — Data Inconsistency, por defecto información |
| `QR_NOT_DETECTED` | QR no detectado | No se pudo localizar el código QR en un documento que debería tenerlo. | Configurable — Invalid Code, por defecto información |
| `QR_VALIDATION_FAILED` | Falló la validación del QR | No se pudo validar el contenido del QR con el resto del documento. | Configurable — Invalid Code, por defecto información |
| `BARCODE_NOT_DETECTED` | Código de barras no detectado | No se pudo localizar el código de barras en un documento que debería tenerlo. | Configurable — Invalid Code, por defecto información |
| `BARCODE_VALIDATION_FAILED` | Falló la validación del código de barras | No se pudo validar el contenido del código de barras con el resto del documento. | Configurable — Invalid Code, por defecto información |
| `BARCODE_SIGNATURE_INVALID` | Firma del código de barras no válida | El código de barras contiene una firma digital de la autoridad emisora y esa firma no se pudo verificar: los datos del código de barras no son los que firmó la autoridad, lo que apunta a un documento falsificado o alterado. Actualmente se comprueba en los códigos de barras **2D-Doc franceses (ANTS)**, donde una firma verificada permite a Didit promover campos sin necesidad de corroborarlos con la MRZ; las firmas AAMVA (licencias de conducir e identificaciones de EE. UU. y Canadá) solo se detectan y registran, todavía no se aplican. | Fija - Revisión (grupo de acción propio `invalid_barcode_signature_action`; aún no configurable desde la consola ni la API) |
| `DATA_INCONSISTENT` | Los datos OCR del documento no son coherentes | Los datos extraídos de distintas partes del documento no coinciden; normalmente, el anverso y el reverso del mismo documento. | Configurable — Data Inconsistency, por defecto información |

> [!NOTE]
>
> La verificación de firma de códigos de barras cubre actualmente los documentos nacionales de identidad franceses, cuyo código de barras 2D-Doc de ANTS está firmado por la autoridad emisora. `BARCODE_SIGNATURE_INVALID` solo se genera cuando la propia comprobación de la firma rechaza el payload. Un código de barras sin firma, uno firmado por una autoridad que aún no está en el almacén de confianza de Didit o uno cuya firma no se puede decodificar se trata como datos no autenticados y se valida con la MRZ y el texto impreso como hasta ahora, sin generar este riesgo.
>
> Los códigos de barras de las licencias de conducir de EE. UU. y Canadá (AAMVA) no se verifican criptográficamente: allí la firma digital es opcional y depende de cada jurisdicción, y ninguna jurisdicción publica claves de verificación, así que Didit solo detecta y registra si un payload contiene una firma; la firma en sí nunca se comprueba. Hoy en día, los fallos de firma AAMVA no son una señal de riesgo. Un payload AAMVA manipulado solo aparece como `BARCODE_VALIDATION_FAILED`, y únicamente si la manipulación también hace que el código de barras no coincida con la MRZ o con los datos impresos/OCR: una firma falsificada en un payload por lo demás coherente internamente pasa sin ninguna señal.
>
> Nunca se pide al usuario que repita la captura ante `BARCODE_SIGNATURE_INVALID`: una firma que no coincide con el payload no se puede corregir tomando una foto mejor.

### Coincidencia de identidad

| Riesgo | Descripción breve | Causa | Gravedad |
| - | - | - | - |
| `ID_DOCUMENT_IN_BLOCKLIST` | Documento de identidad en la lista de bloqueo | El documento coincide con un documento de la lista de bloqueo (misma fecha de nacimiento, mismo país emisor y número de documento exacto) o con un número de documento añadido manualmente a la lista de bloqueo. `additional_data` incluye la referencia de la sesión bloqueada. | `error` — **rechazo automático** |
| `ID_DOCUMENT_IN_ALLOWLIST` | Documento de identidad en la lista de permitidos | El número de documento coincide con tu lista de documentos permitidos, por lo que se omitió la acción de usuario duplicado. `additional_data` incluye el `document_number`. | `information` |
| `POSSIBLE_DUPLICATED_USER` | Posible usuario duplicado de otra sesión | Otro documento de tu aplicación tiene la misma fecha de nacimiento, el mismo país emisor y un nombre completo muy similar, pero pertenece a otro usuario (`vendor_data`), sea cual sea el estado de esa sesión. `additional_data` incluye la referencia de la sesión duplicada. | Configurable — Duplicated User, por defecto información |
| `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS` | El nombre del documento difiere de otros documentos aprobados | El nombre de este documento difiere del de documentos aprobados anteriormente para el mismo usuario. Solo se genera en cuentas del protocolo Didit (UserKYC), no en sesiones estándar de la API. | Configurable — Data Inconsistency, por defecto información |
| `ID_VERIFICATION_DATA_MISMATCH_BETWEEN_DOCUMENTS` | Discrepancia de datos entre documentos de verificación de identidad | Dos documentos de identidad de la misma sesión no coinciden en el nombre o la fecha de nacimiento. | Configurable: Inconsistencia de datos, por defecto information |
| `LOW_FRONT_CAMERA_FACE_MATCH_SIMILARITY` | La selfie tomada durante la captura del documento no coincide con el retrato del documento | El rostro captado por la cámara frontal del usuario durante la captura del documento no coincide bien con el retrato del documento. | Según umbrales: `error` por debajo del umbral de rechazo, `warning` en el umbral de revisión o por debajo de él |
| `FRONT_CAMERA_FACE_IN_BLOCKLIST` | La selfie tomada durante la captura del documento coincide con un rostro de la lista de bloqueo | El rostro de una selfie tomada con la cámara frontal durante la captura del documento coincide con alta confianza con un rostro de tu lista de bloqueo de rostros, tanto si ese rostro se añadió desde una prueba de vida como desde la selfie de captura de documento de otra sesión o mediante carga. `additional_data` incluye la referencia de la sesión bloqueada (`blocklisted_session_id`, `blocklisted_session_number`) cuando el rostro bloqueado procede de una sesión, y `face_image_source` (`front_image_camera_front` o `back_image_camera_front`) para la selfie que coincidió. | `error`: **rechazo automático** |
| `POSSIBLE_FRONT_CAMERA_FACE_IN_BLOCKLIST` | La selfie tomada durante la captura del documento puede coincidir con un rostro de la lista de bloqueo | El rostro de una selfie de captura de documento se parece a un rostro de tu lista de bloqueo de rostros, pero no lo suficiente como para ser una coincidencia confirmada. Mismo `additional_data` que en la fila anterior. | `warning`: **siempre Revisión** |
| `FRONT_CAMERA_DUPLICATED_FACE` | La selfie tomada durante la captura del documento coincide con un usuario aprobado | El rostro de la selfie tomada con la cámara frontal durante la captura del documento coincide con alta confianza con el rostro de un usuario ya aprobado en tu aplicación, por lo que la misma persona podría estar verificándose de nuevo con otra cuenta. `additional_data` incluye la sesión coincidente (`duplicated_session_id`, `duplicated_session_number`) y `face_image_source` para la selfie que coincidió. | Según **Rostro duplicado en la captura silenciosa** (por defecto Aprobar, `information`) |
| `POSSIBLE_FRONT_CAMERA_DUPLICATED_FACE` | La selfie tomada durante la captura del documento puede coincidir con un usuario aprobado | El rostro de una selfie de captura de documento se parece al rostro de un usuario ya aprobado en tu aplicación, pero no lo suficiente como para ser una coincidencia confirmada. Mismo `additional_data` que en la fila anterior. | Según **Rostro duplicado en la captura silenciosa** (por defecto Aprobar, `information`) |
| `FRONT_CAMERA_DUPLICATED_FACE_NAME_MISMATCH` | La selfie de captura del documento coincide con un usuario con otro nombre | Se genera además de `FRONT_CAMERA_DUPLICATED_FACE` cuando el usuario aprobado se verificó con un nombre diferente. `additional_data` añade `name_match_score`; nunca incluye el nombre del otro usuario. | Según **Duplicado en la captura silenciosa con un nombre diferente** (por defecto Revisión, `warning`) |
| `FRONT_CAMERA_DUPLICATED_FACE_DOCUMENT_MISMATCH` | La selfie de captura del documento coincide con un usuario con otra fecha de nacimiento | Se genera además de `FRONT_CAMERA_DUPLICATED_FACE` cuando el documento de identidad del usuario aprobado muestra una fecha de nacimiento diferente. No se marca un documento distinto de la misma persona (por ejemplo, un pasaporte después de un documento de identidad), un documento renovado ni el mismo número de documento del mismo país. `additional_data` añade `mismatch_dimensions`, nunca los datos del documento del otro usuario. | Según **Duplicado en la captura silenciosa con una fecha de nacimiento diferente** (por defecto Revisión, `warning`) |
| `FRONT_CAMERA_CAPTURED_DOCUMENT` | La cámara frontal captó un documento de identidad en lugar del usuario | El fotograma de la cámara frontal tomado mientras se escaneaba el documento muestra un documento de identidad (por ejemplo, una tarjeta sostenida frente a la cámara) y ninguna persona. Para ese fotograma no se calcula la coincidencia de la selfie de captura del documento. | Siempre **Revisión** |

### Prueba de vida del documento (manipulación)

En los flujos se rige por umbrales para cada tipo de fraude. En la API de OCR independiente, estos tres riesgos provocan el rechazo sin condiciones, y una comprobación solicitada que no produce una puntuación utilizable devuelve `In Review` en lugar de aprobar.

Las puntuaciones en sí aparecen en todos los informes V3 como [`document_liveness`](https://docs.didit.me/es/core-technology/id-verification/report-id-verification#puntuaciones-de-prueba-de-vida-del-documento), incluso cuando no se generó ninguna advertencia, de modo que un documento aprobado puede seguir auditándose.

| Riesgo | Descripción breve | Causa | Gravedad |
| - | - | - | - |
| `SCREEN_CAPTURE_DETECTED` | Captura de pantalla del documento detectada | El documento se capturó desde una pantalla en lugar de un documento físico. | `error` por debajo del umbral de rechazo, `warning` por debajo del umbral de revisión y, en caso contrario, `information` |
| `PRINTED_COPY_DETECTED` | Copia impresa del documento detectada | El documento parece ser una copia impresa en lugar del original. | Los mismos umbrales de tres niveles |
| `PORTRAIT_MANIPULATION_DETECTED` | Manipulación del retrato detectada | La zona del retrato parece haber sido sustituida o alterada. | Los mismos umbrales de tres niveles |
| `DOCUMENT_LIVENESS_NOT_COMPUTED` | No se pudo calcular la prueba de vida del documento | La comprobación de prueba de vida del documento (falsificación) solicitada no devolvió una puntuación utilizable (el proveedor falló, respondió con un código distinto de 200 o respondió HTTP 200 con `status="ERR"`), por lo que nunca se comprobó si el documento tenía el retrato sustituido, era una copia impresa o una reproducción en pantalla. La ausencia de puntuación no es prueba de que el documento sea auténtico. Solo en la API de OCR independiente. | `warning` + `In Review` (no configurable; nunca anula un `Declined`) |

### Integridad del canal de captura

| Riesgo | Descripción breve | Causa | Configurable mediante | Valor predeterminado |
| - | - | - | - | - |
| `INJECTION_ATTACK_DETECTED` | Ataque de inyección detectado | La captura se inyectó en lugar de tomarse con la propia cámara del dispositivo: los fotogramas los proporcionó una cámara virtual por software capaz de reproducir cualquier video, una señal de cámara generada por la página o por automatización del navegador, una cámara interceptada o una herramienta de instrumentación conectada a la aplicación. `additional_data.reasons` enumera solo los motivos que lo demuestran, y `source` es `capture_integrity`. Se aplica a la captura del documento y a la selfie tomada para una consulta de identidad. | `id_verification_injection_attack_action` | **Rechazar** |

El `log_type` refleja la acción configurada: `error` para Rechazar, `warning` para Revisión y `information` para Sin acción.
Acción recomendada: trata una sesión rechazada como una captura inyectada y pide a la persona que vuelva a intentarlo en un dispositivo físico con su cámara integrada.
Las señales que puede producir una persona real nunca generan `INJECTION_ATTACK_DETECTED` y se quedan como informativas.
Las aplicaciones que retransmiten una cámara real, como un teléfono usado como webcam o una capa de efectos sobre una webcam real, no se notifican como ataques de inyección.
Esto es detección de ataques de inyección, que es distinta de la detección de ataques de presentación (una falsificación presentada ante una cámara real).

### Imágenes públicas conocidas de documentos

| Riesgo | Descripción breve | Causa | Gravedad |
| - | - | - | - |
| `PUBLIC_DOCUMENT_IMAGE_DETECTED` | Se detectó una imagen de documento pública conocida de internet | La imagen del documento enviada coincide con una imagen conocida disponible públicamente en internet (por ejemplo, un espécimen, una foto de prensa o una foto de stock de un documento), por lo que no puede ser una foto del documento físico del propio usuario. La coincidencia se basa en huellas exactas y perceptuales (pHash/dHash) comparadas con el corpus de Didit de imágenes públicas conocidas de documentos; `additional_data` incluye `match_type` (`exact` o `perceptual`), `source`, `source_url` y un `similarity_score` (0-100). | Fija: Revisión en los flujos; **rechazo automático** en la API independiente `/id-verification` |

### Discrepancias con los datos esperados

Cuando pasas `expected_details` a una sesión, Didit genera una advertencia de discrepancia por cada campo que no coincide. Una única agrupación (`expected_details_mismatch_action`, Revisión por defecto) controla el enrutamiento de todas ellas:

| Riesgo | Descripción breve | Causa |
| - | - | - |
| `FULL_NAME_MISMATCH_WITH_PROVIDED` | El nombre completo no coincide con la información proporcionada | El nombre proporcionado obtiene una puntuación inferior al umbral de coincidencia de nombre frente al documento. |
| `DOB_MISMATCH_WITH_PROVIDED` | La fecha de nacimiento no coincide con la información proporcionada | La fecha de nacimiento proporcionada no coincide. |
| `GENDER_MISMATCH_WITH_PROVIDED` | El género no coincide con la información proporcionada | El género proporcionado no coincide. |
| `COUNTRY_MISMATCH_WITH_PROVIDED` | El país no coincide con la información proporcionada | El país proporcionado no coincide con `issuing_state`. |
| `NATIONALITY_MISMATCH_WITH_PROVIDED` | La nacionalidad no coincide con la información proporcionada | La nacionalidad proporcionada no coincide. |
| `IDENTIFICATION_NUMBER_MISMATCH_WITH_PROVIDED` | El número de identificación no coincide con la información proporcionada | El número de identificación proporcionado no coincide con el número de documento, el número personal ni el número fiscal. |

Cada advertencia de discrepancia incluye los valores esperados y extraídos en `additional_data`.

### Edad

| Riesgo | Descripción breve | Causa | Gravedad |
| - | - | - | - |
| `MINIMUM_AGE_NOT_MET` | No se alcanza la edad mínima | El titular está por debajo de la edad mínima configurada (global o por país/estado). `additional_data` incluye `min_age_allowed` y `user_age`. | Configurable: Edad mínima, Rechazar por defecto (`error`); rechazo incondicional en la API de OCR independiente |
| `MAXIMUM_AGE_EXCEEDED` | Se supera la edad máxima | El titular está por encima de la edad máxima configurada. `additional_data` incluye `max_age_allowed` y `user_age`. | Configurable: Edad máxima, Rechazar por defecto (`error`) |
| `AGE_NOT_DETECTED` | Edad no detectada | Flujos de verificación de edad adaptativa: no se pudo extraer la edad del documento. | `error`: **rechazo automático** |
| `AGE_BELOW_MINIMUM` | Edad inferior a la mínima | Flujos de verificación de edad adaptativa: la edad extraída es inferior a la mínima. | `error`: **rechazo automático** |

### Dirección

| Riesgo | Descripción breve | Causa | Gravedad |
| - | - | - | - |
| `UNPARSED_ADDRESS` | No se pudo determinar la ubicación de la dirección | El documento define un campo de dirección, pero la dirección extraída no se pudo analizar ni geolocalizar. | Configurable: Dirección no analizada, informativa por defecto |

## Coincidencias de documentos entre sesiones

Además de las advertencias anteriores, el informe de ID V3 incluye un array `matches[]`: hasta 5 documentos más de tu aplicación con la misma fecha de nacimiento, el mismo país emisor y un nombre completo muy similar (los documentos en la lista de bloqueo exigen además una coincidencia exacta del número de documento), excluidas las sesiones que pertenecen al mismo usuario. Los documentos añadidos a tu lista de bloqueo aparecen con `is_blocklisted: true`. Los documentos de tu lista de permitidos siguen apareciendo en las coincidencias, pero se omite la acción para usuarios duplicados.

Cada coincidencia incluye `session_id`, `session_number`, `vendor_data`, `verification_date`, `user_details` (`name`, `document_type`, `document_number`), `status`, `is_blocklisted`, `api_service` y una `front_image_url` firmada.

## Ejemplos

### Advertencia configurable con su enrutamiento por defecto (informativa)

```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"
  }
]
```

### Rechazo automático por documento expirado

```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"
  }
]
```

### Discrepancia entre los datos esperados y el 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"
  }
]
```

## Tipos de advertencia

A cada riesgo se le asigna una gravedad según la configuración de tu aplicación. Las tres gravedades son:

## Relacionado

* [Informe de verificación de identidad](https://docs.didit.me/es/core-technology/id-verification/report-id-verification.md): esquema completo del informe y estados.
* [Monitorización de documentos](https://docs.didit.me/es/core-technology/id-verification/document-monitoring-id-verification.md): cómo detecta Didit las manipulaciones y los duplicados entre sesiones.
* [Webhooks](https://docs.didit.me/es/integration/webhooks.md): `session.status.updated` incluye las advertencias en cuanto termina el paso de ID.
* [Modelos de datos: verificación de identidad](https://docs.didit.me/es/reference/data-models.md#verificación-de-identidad): esquema canónico campo por campo.
* [Modelos de datos: objeto de advertencia](https://docs.didit.me/es/reference/data-models.md#objeto-de-advertencia): la estructura de cada entrada de `warnings[]`.


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