Screen · Seguridad de la cuenta

Seguridad de la cuenta

Nueva sección de Perfil (ruta /profile/security) que agrupa las piezas de esta tanda: Cambiar contraseña (→ A4), Dispositivos y sesiones (→ A5) y el control nuevo — cooldown de retiro a destinos nuevos (D9 backend): una wallet o cuenta bancaria recién registrada no recibe retiros durante una ventana de 24–72 h. El usuario puede subirla siempre; bajarla nunca por debajo del piso que fija MiCapi. Cambiarla es operación sensible → step-up OTP por WhatsApp.

/profile/security GET · PUT /v1/me/settings cooldown 24–72 h · piso no-negociable step-up OTP WhatsApp
Layout anotado · hub + cooldown inline

Las dos primeras filas navegan (chevron). El cooldown se edita inline: selector de ventana con el piso marcado — un ajuste, no un flujo. La explicación anti-fraude va en una línea, tono protector.

fila → A4
fila → A5
explicación en una línea
selector · piso marcado
piso · sin tono punitivo
9:41
Seguridad
Cambiar contraseña
Última actualización hace 3 meses
Dispositivos y sesiones
4 sesiones activas
Retiros a destinos nuevos

Cuando registras una wallet o cuenta bancaria nueva, esperamos este tiempo antes de permitir retiros hacia ella. Es tu ventana para reaccionar si alguien más entra a tu cuenta.

Piso MiCapi
24
horas
48
horas
72
horas
Puedes subir la ventana cuando quieras. El mínimo de 24 h lo fija MiCapi para proteger tu dinero y no se puede quitar.

Composición

  1. Filas de navegaciónPatrón de Perfil: chip 40dp neutro + título + subtítulo de estado vivo ("4 sesiones activas" viene de GET /v1/me/sessions). Chevron → push a A4 / A5.
  2. Cooldown inlineNo navega — es un ajuste único. Section head micro-cap + explicación + selector. Editarlo aquí evita una pantalla de un solo control.
  3. Selector con pisoTres ventanas (24/48/72 h). El piso lleva pill PISO MICAPI encima — visible, no negociable, seleccionable (es un valor válido): lo imposible es bajar de él, y no existe opción menor.
  4. Tono protector"Es tu ventana para reaccionar si alguien más entra a tu cuenta" — el cooldown se explica como protección del usuario, nunca como desconfianza hacia él.
  5. Subir sí, bajar con step-upSubir la ventana aplica de inmediato (más protección, sin fricción). Bajar (72→48, 48→24) es sensible → step-up OTP. Bajar del piso: imposible por diseño.
Step-up al bajar · y estados

Reducir la ventana confirma con OTP de 6 dígitos por WhatsApp (canal step-up canónico). El sheet explica la consecuencia antes de pedir el código.

Step-up · bajar ventana
9:41
Seguridad

Confirma el cambio

Vas a reducir la espera de retiros a destinos nuevos de 48 a 24 horas. Enviamos un código por WhatsApp al +57 ******1658.

73
Confirmar cambio
Cargando · settings
9:41
Seguridad

Reglas de estado

  1. Subir · inmediato48→72: PUT directo, el selector confirma con transición del borde y un aviso inline "Listo — aplica desde ahora". Sin OTP: más protección nunca requiere fricción.
  2. Bajar · step-upSheet con la consecuencia explícita + OTP 6 dígitos por WhatsApp (reuso components-otp-input). El cambio aplica solo a destinos registrados después del cambio — los cooldowns ya corriendo no se acortan.
  3. Error / offlinePUT fallido → el selector revierte al valor anterior con mensaje accionable. Offline: selector disabled + valores cacheados visibles.
  4. NotificaciónTodo cambio de ventana dispara notificación de seguridad a todos los dispositivos — igual que cambio de clave.

El piso es del servidor. El backend (D9) valida cooldown_hours ≥ floor en cada PUT y el registro de destinos aplica la ventana vigente server-side — la UI solo la refleja. El piso puede subir por política de riesgo sin release de app: el selector renderiza las opciones que devuelve GET /v1/me/settings (floor_hours, options, current). Nunca hardcodear 24/48/72.

Dark · 360dp
Dark · hub
9:41
Seguridad
Cambiar contraseña
Última actualización hace 3 meses
Dispositivos y sesiones
4 sesiones activas
Retiros a destinos nuevos

Cuando registras una wallet o cuenta bancaria nueva, esperamos este tiempo antes de permitir retiros hacia ella. Es tu ventana para reaccionar si alguien más entra a tu cuenta.

Piso MiCapi
24
horas
48
horas
72
horas
Puedes subir la ventana cuando quieras. El mínimo de 24 h lo fija MiCapi para proteger tu dinero y no se puede quitar.
Notas de implementación · Flutter

Settings + step-up condicional

Endpoints

GET /v1/me/settings → {withdrawal_cooldown: {current, floor_hours, options[]}}. PUT /v1/me/settings {cooldown_hours} — al bajar responde 428 step_up_required → flujo OTP → reintento con otp_token.

Step-up · WhatsApp

POST /v1/auth/step-up {channel: whatsapp} → OTP 6 dígitos con vigencia 10 min. Mismo widget de A3. El canal WhatsApp es el step-up canónico del sistema (D9).

Selector dinámico

Opciones renderizadas desde options[]; el pill "Piso MiCapi" se ancla a floor_hours. Con piso = 48 (política futura), la opción 24 simplemente no llega.

Dónde se siente el cooldown

El registro de wallet (screens-wallet-register) y de cuenta bancaria ya muestran su aviso de espera al finalizar — leen la misma setting. El flujo de retiro bloquea destinos en cooldown con countdown a la hora exacta de desbloqueo.

Subtítulos vivos

"4 sesiones activas" y "hace 3 meses" se cargan con la pantalla (skeleton por fila). Si el fetch falla, la fila navega igual — el subtítulo cae a vacío, nunca bloquea.

Accesibilidad

Selector como RadioGroup; cada opción anuncia "24 horas, mínimo fijado por MiCapi". El resultado del cambio se anuncia con liveRegion.