Saltar al contenido principal

Validaciones de Identidad

Combinaciones y Estrategias por Firmante

Al generar un proceso de firma, es fundamental comprender las diferentes combinaciones posibles de validaciones de identidad, así como las estrategias que permiten aplicarlas de forma global o individual por firmante.

Para estructurar dichas validaciones existen reglas que debes tener en cuenta para asegurar que el proceso funcione correctamente.

1. Tipos de validaciones disponibles

Las validaciones de identidad que puedes combinar en un proceso incluyen:

ValidaciónTipoRequeridoDescripción
cameraBooleanOpcionalSolicita una foto del rostro del firmante.
otpCodeBooleanOpcionalSolicita código de verificación.
options.cameraStringCondicionalSi quieres cotejar la foto del rostro con el ID del firmante debes enviar en este campo 'identification', o si quieres solo la foto del participante, enviar 'photo'.
options.otpCodeStringCondicionalEste campo acepta los valores 'phone' e 'email'. para indicar por qué medio recibirá el código de firmante en caso de enviar otpCode en true en la base de la data.
options.whatsappBooleanCondicionalEnvíe este campo en true sólo si desea que el flujo de firma de este firmante se desarrolle a través de WhatsApp, por defecto es false.
options.bothBooleanCondicionalEnvíe este campo en true sólo si desea que el flujo de firma de este firmante se desarrolle a través de WhatsApp y correo electrónico, por defecto es false.
options.identificationCardBackBooleanCondicionalEnvíe este campo en true sólo si desea que la validación de identidad adicionalmente solicite la parte posterior del documento solo disponible para WhatsApp.
both no existe como campo independiente

both no es un parámetro de primer nivel: no existe en la raíz de la petición ni como signProfile[x].both. Solo existe anidado como options.both (o signProfile[x].options.both para validaciones individuales).

2. Validaciones globales e individuales

Puedes aplicar las validaciones de dos maneras:

  • Globales: en la raíz de la petición. Se aplican automáticamente a todos los firmantes.
  • Individuales: en el objeto signProfile[x], para validar a cada firmante de forma personalizada.
info

Las validaciones individuales tienen prioridad sobre las globales cuando se declaran ambas.

Los paquetes solo admiten validaciones globales

La creación de paquetes (POST /document/many) no tiene soporte para validaciones individuales por firmante: las validaciones se toman únicamente de la raíz de la petición y aplican a todos los participantes del paquete. Lo descrito en esta sección sobre validaciones individuales no aplica a ese endpoint.

La prioridad individual es total, no una combinación

Si un signProfile[x] define cualquiera de estos campos: camera, otpCode u options, ese firmante deja de heredar las validaciones globales por completo, incluso para los campos que no incluyó. Los campos que falten en ese signProfile[x] se resuelven como false (para camera/otpCode) o como objeto vacío (para options), sin importar lo que digan las validaciones globales.

Ejemplo: si en la raíz envías "camera": true pero un firmante individual solo define "options": { "otpCode": "email" } (sin incluir "camera": true en ese mismo signProfile[x]), ese firmante terminará con camera: false, aunque la validación global lo tenga en true.

Si quieres que un firmante mantenga una validación global y solo personalice otra, debes repetir explícitamente cada campo relevante (camera, otpCode) dentro de ese mismo signProfile[x].

3. Reglas clave

  1. options.camera = 'identification' activa comparación biométrica, pero solo funcionará si el firmante tiene identification, country e identificationType definidos.
  2. options.both = true indica que el firmante debe recibir notificaciones por correo y WhatsApp al mismo tiempo, para que sea efectivo: options.whatsapp = true.
  3. options.camera y options.otpCode solo son válidos si, en ese mismo nivel (raíz o dentro del mismo signProfile[x]), existe camera: true u otpCode: true respectivamente. Por ejemplo, signProfile[x].options.camera requiere signProfile[x].camera: true en ese mismo firmante; no basta con que camera esté en true a nivel global. Si declaras options.camera u options.otpCode sin su contraparte booleana en ese mismo nivel, el proceso no será válido.
  4. Las validaciones individuales sobrescriben por completo a las globales para ese firmante: si un signProfile[x] declara camera, otpCode u options, cualquier campo no incluido en ese mismo signProfile[x] se resuelve como false (o {} para options), sin heredar el valor global. Ver advertencia en la sección 2.

4. Ejemplos:

Validaciones globales:

{
...,
"camera": true,
"otpCode": true,
"options": {
"camera": "identification",
"otpCode": "email",
}
"signProfile": [
{
"name": "Firmante 1",
"email": "example@auco.ai",
"phone": "+573000000000",
"identification": "123456789",
"identificationType": "CC",
"country": "CO"
},
{
"name": "Firmante 2",
"email": "example2@auco.ai",
"phone": "+573000000000",
"identification": "123456789",
"identificationType": "CC",
"country": "CO"
}
],
...
}

Validaciones individuales:

{
...,
"signProfile": [
{
"name": "Firmante 1",
"email": "example@auco.ai",
"phone": "+573000000000",
"camera": true,
"otpCode": true,
"identification": "123456789",
"identificationType": "CC",
"country": "CO"
"options": {
"camera": "identification",
"whatsapp": true,
"otpCode": "email"
}
}
],
...
}