Un flujo se arma con pasos. Cada paso ejecutado deja un veredicto en
result.steps y, si algo no dio bien, uno o más
reason codes.
Veredictos de un paso
| Campo | Tipo | Efecto en la sesión | Descripción |
|---|---|---|---|
approved | Veredicto | sigue | El paso pasó. El flujo continúa. |
rejected | Veredicto | rechaza | Fallo duro. Cualquier paso rechazado rechaza la sesión entera, salvo que una regla lo descarte con skip. |
review | Veredicto | revisión | Señales ambiguas. Si no hubo ningún rechazo, la sesión termina en needs_review. |
retryable | Veredicto | reintento | Problema recuperable (foto borrosa, reflejo). La persona puede reintentar hasta el máximo del paso; si se agotan, cuenta como rechazo. |
La decisión final es simple y no aprueba por omisión: cualquier fallo rechaza; si no hubo fallos pero sí revisión, la sesión va a revisión; si no, aprueba. Un paso re-ejecutado vale por su último resultado.
consent
siempre presente 0 tokensConsentimiento informado para el tratamiento de datos biométricos y personales. Lo antepone la plataforma en todos los flujos: no es un paso configurable, no se puede quitar y no cuesta tokens. Sin consentimiento, la sesión no avanza.
Aparece en result.steps como cualquier otro paso.
document_ar
documento argentinoCaptura y valida un documento argentino. Acepta DNI tarjeta, pasaporte y licencia de conducir, según lo que habilite el proyecto.
Qué hace
- OCR del frente y del dorso para extraer los campos.
- PDF417: decodifica server-side el código de barras del dorso del DNI. Es una fuente independiente del OCR.
- MRZ: parsea la zona legible por máquina (dorso del DNI, hoja del pasaporte) y valida sus dígitos verificadores.
- Cruce: compara las fuentes entre sí. Los nombres se comparan con tolerancia configurable; el número de documento, de forma exacta.
- CUIL: reconstruye y valida el dígito verificador.
- Forense anti-pantalla: detecta fotos de una pantalla y señales de edición.
- Padrón (opcional): cruza los datos contra el padrón oficial.
Reason codes que puede devolver
| Campo | Tipo | Severidad | Descripción |
|---|---|---|---|
DOC_FIELD_MISMATCH | Cruce | rechazo | Las fuentes no coinciden en un campo crítico. |
DOC_CUIL_CHECK_FAILED | Cruce | rechazo | El dígito verificador del CUIL no cierra. |
DOC_EXPIRED | Vigencia | rechazo | Documento vencido (si el proyecto rechaza vencidos). |
DOC_SCREEN_DETECTED | Forense | rechazo | Foto de una pantalla, no del documento físico. |
DOC_FACE_ABSENT | Forense | rechazo | No se detectó rostro en el documento, con imagen de buena calidad. |
DOC_UNSUPPORTED_TYPE | Tipo | rechazo | El documento no es de un tipo que el proyecto acepte. |
DOC_PDF417_UNREADABLE | Captura | reintentable | No se pudo leer el código de barras del dorso. |
DOC_MRZ_UNREADABLE | Captura | reintentable | No se pudo leer la zona legible por máquina. |
DOC_IMAGE_QUALITY_LOW | Captura | reintentable | Imagen borrosa o con poca definición. |
DOC_GLARE | Captura | reintentable | Reflejo sobre el holograma. |
DOC_FIELD_MISSING | Cruce | blando | Faltan campos para completar una comparación. |
DOC_MRZ_CHECKDIGIT_FAIL | Cruce | blando | Un dígito verificador de la MRZ no cierra. |
DOC_FORENSICS_SUSPECT | Forense | blando | Señales de manipulación o de captura indirecta. |
DOC_NAME_FUZZY_LOW | Cruce | blando | Los nombres se parecen pero por debajo del umbral del proyecto. |
PADRON_MISMATCH | Padrón | rechazo | Los datos no coinciden con el padrón. |
PADRON_MISMATCH_MINOR | Padrón | blando | Diferencia menor en el nombre respecto del padrón. |
PADRON_UNAVAILABLE | Padrón | según política | El padrón no respondió. El proyecto decide si aprueba, revisa o rechaza. |
Guardas contra falsos rechazos
- Los campos con confianza baja de OCR se descartan antes de cruzar, para no
fabricar un
DOC_FIELD_MISMATCHinventado. - "Sin foto" con imagen pobre es recapturar, no fraude: sólo es rechazo duro si la calidad de imagen era buena.
- La detección de pantalla sí es rechazo duro incluso con imagen nítida.
- El padrón sólo puede empeorar el veredicto, nunca mejorarlo.
face_liveness
biometríaPrueba de vida y, opcionalmente, comparación contra la foto del documento.
Qué hace
- Prueba de vida con Amazon Rekognition Face Liveness. Corre siempre: no hay forma de publicar el paso con la biometría desactivada.
- Face match (opcional): compara la cara capturada contra la foto del documento, con tres bandas configurables — auto-aprueba, zona gris que va a revisión, y rechazo.
Si el paso no configura compareFaces, corre en modo sólo-prueba-de-vida. Es un
modo explícito y válido, no un accidente de configuración.
Cómo decide
- Si la prueba de vida no pasa y quedan reintentos →
retryableconLIVENESS_FAILED. - Si no pasa y se agotaron los reintentos →
rejectedconLIVENESS_MAX_RETRIES. - Si pasa, manda el face match: por encima del umbral aprueba, en la banda de
revisión da
reviewconBIO_FACE_GRAY_ZONE, por debajorejectedconBIO_FACE_MISMATCH.
Si el liveness falla, no se corre el face match: no se paga una comparación que no va a decidir nada.
otp_email
canalEnvía un código de un solo uso al email y verifica que la persona lo reciba.
Devuelve OTP_MAX_ATTEMPTS si se agotan los intentos.
Parámetros configurables: duración del código, intentos máximos, reenvíos máximos, y si se le pide el email a la persona cuando no viene precargado.
otp_whatsapp
canalIgual que el anterior, por WhatsApp. Agrega la opción de caer a email si el envío por WhatsApp no prospera.
form
datosFormulario propio dentro del flujo. Campos de texto, select, fecha, número y checkbox, con largo máximo y obligatoriedad por campo.
No produce reason codes: se completa o no se completa. Las respuestas viajan en
result.form_data de los webhooks, si el proyecto lo activó.
choice
ramificaciónNo valida nada por sí mismo: agrupa otros pasos como opciones y exige completar un mínimo. Sirve para ofrecer alternativas ("verificá por DNI o por pasaporte") o para exigir dos de tres factores.
userSelects decide quién elige (la persona o el flujo), no cuántas opciones
corren: siempre corren minRequired opciones.
Qué no aparece en result.steps
Sólo aparecen los pasos que se ejecutaron. Un paso descartado por una regla
skip, o una rama de choice que la persona no eligió, no deja rastro en el
resultado.