Captura de documento y selfie biométrico con prueba de vida — obligatorio por la Resolución UIAF 314/2021 antes de operar. Cubre los frames de cámara inmersivos, sus estados de detección, y los resultados de verificación. La captura es solo por cámara, nunca galería (anti-fraude).
Modal full-screen que el usuario debe leer antes de activar la cámara. El texto va visible inline — nunca escondido tras un (i). Copy aprobado del vault, verbatim.
Pantalla bloqueante
9:41
¿Por qué pedimos tu documento y selfie?
MiCapi está obligada por la Resolución UIAF 314 de 2021 a verificar la identidad de todos sus usuarios antes de operar. Para esto necesitamos:
Foto de tu cédula de ciudadanía.
Un selfie con prueba de vida para confirmar que eres tú.
Estos datos solo se usan para verificar tu identidad y cumplir con la normativa antilavado. No los compartimos con terceros salvo obligación legal. Los conservamos por un mínimo de 5 años según la ley.
Tu selfie y los datos biométricos son tratados por [proveedor KYC] como encargado del tratamiento, bajo contrato de confidencialidad con MiCapi.
Reglas del aviso
BloqueanteModal full-screen. La cámara no se activa hasta que el usuario pulse "Entendido, continuar". No hay forma de saltarlo.
Texto verbatimCopy aprobado del vault — no se parafrasea ni se resume. Incluye base legal, finalidad, no-cesión a terceros y retención de 5 años.
Visible inlineVa en el cuerpo, nunca tras info_outline. Es una declaración de cumplimiento, no un aviso opcional.
Placeholder literal[proveedor KYC] queda como placeholder — Verifik/Didit aún sin definir. Se reemplaza al cerrar contrato.
A · Captura de documento
Cámara full-screen con overlay oscuro y marco guía con proporción de cédula colombiana (85,6 × 54 mm). Detección de bordes: el marco vira a verde cuando el documento encaja.
1 · Buscando documento
9:41
Ubica el frente de tu cédula dentro del marco
Buscando bordes…
2 · Documento detectado
9:41
Mantén firme · capturando…
Documento alineado
3 · Revisión de foto
9:41
¿Se ve clara y legible?
Flujo de documento
Marco guíaRectángulo con proporción de cédula CO, esquinas resaltadas en blanco, overlay oscuro alrededor. Ghost del layout de cédula como ayuda de encuadre.
Detección de bordesAl encajar, el marco vira a success + hint "Documento alineado" + shutter se habilita (o captura automática).
RevisiónFoto tomada con "Usar esta foto" / "Repetir". El usuario confirma legibilidad antes de enviar.
ReversoLa cédula tiene dos caras: se repite el flujo para capturar el reverso. Sin variante de pasaporte ni selector de documento.
B · Selfie con prueba de vida (liveness)
Cámara frontal con marco ovalado para el rostro. Prompts secuenciales de gestos (parpadear, girar, sonreír) con indicador de progreso. El óvalo vira a verde cuando el liveness pasa.
1 · Posicionando rostro
9:41
Centra tu rostro en el óvalo
Acerca tu rostro
2 · Siguiendo instrucción
9:41
Parpadea despacio
Gesto 2 de 3
3 · Liveness OK
9:41
Rostro verificado
Prueba de vida superada
Flujo de liveness
Óvalo guíaMarco ovalado dashed para el rostro; overlay oscuro alrededor. "Centra tu rostro en el óvalo".
Prompts secuencialesGestos según el proveedor KYC: "Parpadea", "Gira la cabeza", "Sonríe". Chip prominente con el gesto actual.
Progreso de gestosSegmentos bajo el óvalo marcan cuántos gestos van (2 de 3).
ÉxitoEl óvalo vira a success con glow + "Prueba de vida superada".
Estados de resultado · compartidos
La validación la hace el proveedor KYC. Nunca se muestran errores técnicos crudos — solo mensajes humanos. Tras 3 intentos, pasa a revisión manual (no es error).
Procesando
9:41
Verificando tu identidad…
Estamos validando tu documento y selfie. Esto puede tomar unos segundos.
Aprobado
9:41
Identidad verificada
Tu identidad fue confirmada. Ya puedes operar en MiCapi.
Rechazado
9:41
No pudimos verificar tu identidad
La foto del documento está borrosa
Asegúrate de tener buena luz y que el documento se vea completo.
Intento 1 de 3
Revisión manual
9:41
Tu verificación pasó a revisión manual
Nuestro equipo revisará tu caso. Te avisaremos pronto — normalmente dentro de 24 horas hábiles.
Mensajes humanos, no técnicos. El motivo de rechazo es siempre genérico y accionable ("La foto está borrosa", "El documento no es legible") — nunca el error crudo del SDK del proveedor. Tras 3 intentos fallidos, el flujo pasa a revisión manual: es un estado de espera, no un error, y no culpa al usuario.
Permiso de cámara denegado
Si el usuario negó el permiso permanentemente, el componente no puede volver a pedirlo desde la app — debe enviar a Ajustes del sistema con un CTA explícito.
Permiso denegado
9:41
Necesitamos acceso a tu cámara
Para verificar tu identidad necesitamos tomar fotos de tu documento y un selfie. Activa el permiso de cámara en Ajustes.
Ajustes → MiCapi
Permisos → Cámara
Permitir
Manejo de permisos
Primera vezSe pide el permiso de cámara con el prompt nativo de Android tras el aviso legal.
Denegado una vezSe puede volver a pedir con contexto. Explicar por qué antes de re-solicitar.
Denegado permanenteAndroid ya no muestra el prompt. CTA explícito "Abrir Ajustes" con openAppSettings() + pasos visuales.
Solo cámaraNunca se ofrece galería como alternativa, aunque el permiso de cámara falle. Es anti-fraude no negociable.
Modo claro y oscuro. Los frames de cámara son oscuros por naturaleza (el viewport es la imagen real) — idénticos en ambos modos. Solo el chrome de las pantallas de superficie (aviso legal, resultados, permiso) se adapta: fondo #0F1A19, texto #E4ECEB, manteniendo el verde de acción y los colores semánticos. El óvalo/marco success y los mensajes de error usan los mismos tokens en ambos modos.
Flutter notes
Implementación
image_picker
ImageSource.camera siempre — nuncaImageSource.gallery. La galería permitiría subir una foto de un documento ajeno (fraude).
camera / CameraController
Para el preview en vivo con overlay (marco guía, detección de bordes). El paquete camera da el stream; el overlay es un Stack encima.
SDK del proveedor KYC
El liveness y la validación los hace el SDK de [proveedor KYC] (Verifik/Didit). La app orquesta los frames; el SDK decide aprobado/rechazado.
permission_handler
Permission.camera.request(); si isPermanentlyDenied, mostrar la pantalla de Ajustes con openAppSettings().
Errores
Mapear los códigos del SDK a mensajes humanos genéricos. Nunca exponer el error técnico crudo en la UI.
Intentos
Contador local: a los 3 rechazos, cambiar al estado "revisión manual" en vez de seguir reintentando.
Retención
Las imágenes se envían al backend/proveedor y no se persisten en el dispositivo. Retención de 5 años en el lado servidor, según ley.