Verificación

Validadores

Qué hace cada paso y qué reason codes puede devolver.

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

CampoTipoEfecto en la sesiónDescripción
approvedVeredictosigueEl paso pasó. El flujo continúa.
rejectedVeredictorechazaFallo duro. Cualquier paso rechazado rechaza la sesión entera, salvo que una regla lo descarte con skip.
reviewVeredictorevisiónSeñales ambiguas. Si no hubo ningún rechazo, la sesión termina en needs_review.
retryableVeredictoreintentoProblema 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.


siempre presente 0 tokens

Consentimiento 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 argentino

Captura y valida un documento argentino. Acepta DNI tarjeta, pasaporte y licencia de conducir, según lo que habilite el proyecto.

Qué hace

  1. OCR del frente y del dorso para extraer los campos.
  2. PDF417: decodifica server-side el código de barras del dorso del DNI. Es una fuente independiente del OCR.
  3. MRZ: parsea la zona legible por máquina (dorso del DNI, hoja del pasaporte) y valida sus dígitos verificadores.
  4. Cruce: compara las fuentes entre sí. Los nombres se comparan con tolerancia configurable; el número de documento, de forma exacta.
  5. CUIL: reconstruye y valida el dígito verificador.
  6. Forense anti-pantalla: detecta fotos de una pantalla y señales de edición.
  7. Padrón (opcional): cruza los datos contra el padrón oficial.

Reason codes que puede devolver

CampoTipoSeveridadDescripción
DOC_FIELD_MISMATCHCrucerechazoLas fuentes no coinciden en un campo crítico.
DOC_CUIL_CHECK_FAILEDCrucerechazoEl dígito verificador del CUIL no cierra.
DOC_EXPIREDVigenciarechazoDocumento vencido (si el proyecto rechaza vencidos).
DOC_SCREEN_DETECTEDForenserechazoFoto de una pantalla, no del documento físico.
DOC_FACE_ABSENTForenserechazoNo se detectó rostro en el documento, con imagen de buena calidad.
DOC_UNSUPPORTED_TYPETiporechazoEl documento no es de un tipo que el proyecto acepte.
DOC_PDF417_UNREADABLECapturareintentableNo se pudo leer el código de barras del dorso.
DOC_MRZ_UNREADABLECapturareintentableNo se pudo leer la zona legible por máquina.
DOC_IMAGE_QUALITY_LOWCapturareintentableImagen borrosa o con poca definición.
DOC_GLARECapturareintentableReflejo sobre el holograma.
DOC_FIELD_MISSINGCruceblandoFaltan campos para completar una comparación.
DOC_MRZ_CHECKDIGIT_FAILCruceblandoUn dígito verificador de la MRZ no cierra.
DOC_FORENSICS_SUSPECTForenseblandoSeñales de manipulación o de captura indirecta.
DOC_NAME_FUZZY_LOWCruceblandoLos nombres se parecen pero por debajo del umbral del proyecto.
PADRON_MISMATCHPadrónrechazoLos datos no coinciden con el padrón.
PADRON_MISMATCH_MINORPadrónblandoDiferencia menor en el nombre respecto del padrón.
PADRON_UNAVAILABLEPadrónsegún políticaEl 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_MISMATCH inventado.
  • "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ía

Prueba de vida y, opcionalmente, comparación contra la foto del documento.

Qué hace

  1. Prueba de vida con Amazon Rekognition Face Liveness. Corre siempre: no hay forma de publicar el paso con la biometría desactivada.
  2. 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 → retryable con LIVENESS_FAILED.
  • Si no pasa y se agotaron los reintentos → rejected con LIVENESS_MAX_RETRIES.
  • Si pasa, manda el face match: por encima del umbral aprueba, en la banda de revisión da review con BIO_FACE_GRAY_ZONE, por debajo rejected con BIO_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

canal

Enví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

canal

Igual que el anterior, por WhatsApp. Agrega la opción de caer a email si el envío por WhatsApp no prospera.


form

datos

Formulario 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ón

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