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

# Advertencias y códigos de riesgo de estimación de edad

> Códigos de riesgo de estimación de edad en Didit: AGE_BELOW_MINIMUM, AGE_NOT_DETECTED, LOW_LIVENESS_SCORE, con umbrales y acciones.

La función Estimación de edad emite **advertencias** cada vez que se activa una señal de riesgo en la comprobación combinada de edad y prueba de vida pasiva: la edad estimada está por debajo de el mínimo configurado, no se pudo calcular la edad, la persona no superó la prueba de vida, no se encontró ningún rostro o se detectó un ataque de presentación. En esta página se enumeran todos los códigos, qué los activa y cómo configurar la respuesta del workflow.

## Descripción general

La Estimación de edad siempre ejecuta **dos comprobaciones en una sola llamada** (una prueba de vida pasiva y un modelo de regresión de edad), por lo que sus advertencias pasan por el pipeline compartido de prueba de vida y se etiquetan con la función `LIVENESS`. Aparecen en el informe en `age_estimation.warnings[]` (API independiente) o en `liveness_checks[].warnings[]` (integrada en un flujo). El esquema del objeto de advertencia está documentado en [Modelos de datos: objeto Warning](https://docs.didit.me/es/reference/data-models.md#objeto-de-advertencia).

Generadores:

* **API independiente**: el endpoint genera las cinco advertencias que se indican en [Disparadores de rechazo](#disparadores-de-rechazo).
* **Flujos de trabajo**: los generadores compartidos de prueba de vida más las comprobaciones específicas de edad. Las advertencias de edad solo se activan en flujos de estimación de edad (flujos de verificación de edad adaptativa o nodos `AGE_ESTIMATION` del flujo); un paso de prueba de vida simple informa una edad estimada, pero nunca genera advertencias de edad.

Niveles de gravedad: los cinco riesgos de rechazo automático (`NO_FACE_DETECTED`, `LIVENESS_FACE_ATTACK`, `FACE_IN_BLOCKLIST`, `AGE_BELOW_MINIMUM`, `AGE_NOT_DETECTED`) siempre son `log_type: "error"` y fuerzan `Declined`; el resto de riesgos se clasifican como `error` / `warning` / `information` según los umbrales o la acción configurada.

## Disparadores de rechazo

En la API independiente, la decisión es `Declined` cada vez que se activa **cualquier** advertencia:

* **Edad por debajo del umbral**: la edad estimada es estrictamente inferior a `age_estimation_decline_threshold` (valor predeterminado `18`; `0` desactiva la comprobación de edad). Genera `AGE_BELOW_MINIMUM`.
* **Edad no calculada**: no se pudo estimar la edad de ningún rostro (no hay un rostro detectable o no hay un rostro utilizable para el modelo de edad). Genera `AGE_NOT_DETECTED`.
* **Puntuación de prueba de vida igual o inferior al umbral**: `score <= face_liveness_score_decline_threshold` (valor predeterminado `30`); una puntuación `null` cuenta como `0`. Genera `LOW_LIVENESS_SCORE`. Se suprime cuando se activa `NO_FACE_DETECTED`: ambas son mutuamente excluyentes.
* **No se detectó ningún rostro**: el modelo de prueba de vida no encontró ningún rostro. Genera `NO_FACE_DETECTED`.
* **Ataque de presentación**: el modelo de prueba de vida detectó una pantalla, una foto impresa, una máscara u otro intento de suplantación. Genera `LIVENESS_FACE_ATTACK`.

En los flujos, las comprobaciones de edad comparan la edad estimada truncada (en años completos) con los umbrales configurados:

* **Con la alternativa de verificación de identidad activada** (`enable_id_verification_fallback`, activada de forma predeterminada): una edad inferior a `borderline_minimum_age_threshold` (valor predeterminado `18`) genera `AGE_BELOW_MINIMUM`; las edades dentro de la rango limítrofe (hasta `borderline_maximum_age_threshold`) pasan a la verificación de documentos en lugar de generar una advertencia, y `AGE_NOT_DETECTED` nunca se genera: si no se detecta la edad, también se procede a la verificación de documentos.
* **Con la alternativa desactivada**: si no hay edad estimada se genera `AGE_NOT_DETECTED`, y una edad inferior a `minimum_age_threshold` (valor predeterminado `18`) genera `AGE_BELOW_MINIMUM`.

## Riesgos configurables

Los siguientes riesgos te permiten ajustar los umbrales o la acción mediante la configuración de cada flujo:

| Configuración | Código de riesgo | Opciones configurables |
| - | - | - |
| Umbrales de edad | `AGE_BELOW_MINIMUM` | API independiente: `age_estimation_decline_threshold` (valor predeterminado `18`, `0` lo desactiva). Flujos: `minimum_age_threshold` / `borderline_minimum_age_threshold` (valor predeterminado `18`) más la alternativa de verificación de identidad para edades en la franja límite. |
| Puntuación baja de prueba de vida | `LOW_LIVENESS_SCORE` | **Umbral de rechazo** (valor predeterminado `30` → `error` + rechazo) y **Umbral de revisión** (valor predeterminado `60` → `warning` + revisión) independientes, aplicados sobre la puntuación de prueba de vida. |
| Posible rostro duplicado | `POSSIBLE_DUPLICATED_FACE` | Acción al detectarlo: `DECLINE` / `REVIEW` / `NO_ACTION` (valor predeterminado `NO_ACTION`). Solo en sesiones de flujo. |
| Múltiples rostros | `MULTIPLE_FACES_DETECTED` | Acción al detectarlo: `DECLINE` / `REVIEW` / `NO_ACTION` (valor predeterminado `NO_ACTION`). Solo en la prueba de vida pasiva de flujos. |

Las sesiones de flujo también contrastan el rostro con tus listas: `FACE_IN_BLOCKLIST` siempre rechaza automáticamente (`error`), mientras que `POSSIBLE_FACE_IN_BLOCKLIST` pasa la sesión a `In Review`.

## Advertencias generadas

| Etiqueta | Gravedad (`log_type`) | Descripción |
| - | - | - |
| `AGE_BELOW_MINIMUM` | `error`: rechazo automático | La edad estimada está por debajo del umbral activo (en la API independiente, `age_estimation_decline_threshold`; en flujos, `minimum_age_threshold` / `borderline_minimum_age_threshold`; todos con valor predeterminado `18`). `additional_data` siempre es `null`. |
| `AGE_NOT_DETECTED` | `error`: rechazo automático | No se pudo estimar la edad a partir del rostro. La API independiente siempre genera esta advertencia cuando la edad es `null`; en los flujos, solo cuando la alternativa de verificación de identidad está desactivada. |
| `LOW_LIVENESS_SCORE` | `error` si es igual o inferior al umbral de rechazo; `warning` si es igual o inferior al umbral de revisión | La puntuación de prueba de vida es igual o inferior al umbral configurado (valor predeterminado de rechazo `30` en la API independiente y en flujos; valor predeterminado de revisión `60` en flujos), lo que indica el posible uso de una foto estática, una pantalla o un video. No se genera cuando se activa `NO_FACE_DETECTED`. |
| `NO_FACE_DETECTED` | `error`: rechazo automático | No se detectó ningún rostro en la imagen enviada. Vuelve a pedir al usuario que se centre ante la cámara con una iluminación adecuada. |
| `LIVENESS_FACE_ATTACK` | `error`: rechazo automático | El modelo de prueba de vida detectó un ataque de presentación (reproducción en pantalla, foto impresa, máscara, deepfake). |
| `MULTIPLE_FACES_DETECTED` | Según la acción configurada (valor predeterminado `information`, sin acción) | Se encontró más de un rostro en la imagen; el rostro más grande determina el resultado. Solo en la prueba de vida pasiva de los flujos: la API independiente no la genera. |
| `FACE_IN_BLOCKLIST` | `error`: rechazo automático | El rostro detectado coincide con una entrada de tu lista de bloqueo de rostros gestionada mediante la [API de listas](https://docs.didit.me/es/management-api/lists/overview.md). Solo en sesiones de flujo. |
| `POSSIBLE_DUPLICATED_FACE` | Según la acción configurada (valor predeterminado `information`, sin acción) | El rostro detectado es muy similar a un rostro aprobado previamente en otra sesión (se excluyen las coincidencias que comparten el mismo `vendor_data`). Solo en sesiones de flujo. |

## Ejemplo

```json theme={null}
{
  "warnings": [
    {
      "risk": "LOW_LIVENESS_SCORE",
      "feature": "LIVENESS",
      "additional_data": null,
      "log_type": "error",
      "short_description": "Low liveness score",
      "long_description": "The liveness check resulted in a low score, indicating potential use of non-live facial representations or poor-quality biometric data."
    },
    {
      "risk": "AGE_BELOW_MINIMUM",
      "feature": "LIVENESS",
      "additional_data": null,
      "log_type": "error",
      "short_description": "Age below minimum",
      "long_description": "The age of the face is below the minimum age threshold for the application."
    }
  ]
}
```

En los payloads de decisión de los flujos (`liveness_checks[].warnings[]`), cada advertencia incluye además un `node_id` que identifica el nodo del flujo que la generó.

## Tipos de advertencia

A cada riesgo se le asigna una gravedad según la configuración de tu aplicación. Las gravedades se dividen en tres categorías:

## Relacionado

* [Visión general de la estimación de edad](https://docs.didit.me/es/core-technology/age-estimation/overview.md): comportamiento de la función, precios y lógica de decisión.
* [Informe de estimación de edad](https://docs.didit.me/es/core-technology/age-estimation/report-age-estimation.md): estructura completa de la respuesta tanto de la API independiente como del valor del flujo integrado.
* [Referencia de la API independiente](https://docs.didit.me/es/standalone-apis/age-estimation.md): solicitud y respuesta de `POST /v3/age-estimation/`.
* [Prueba de vida pasiva](https://docs.didit.me/es/core-technology/liveness/overview.md): el modelo de prueba de vida compartido que se usa en las respuestas de estimación de edad.
* [Modelos de datos: estimación de edad](https://docs.didit.me/es/reference/data-models.md#estimación-de-edad): esquema canónico campo por campo.


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