P0
Bootstrap — Verificación inicial
Confirmar que el entorno está listo antes de escribir la primera pantalla.
0/4
Herramienta: Expo Go en tu teléfono
Instala Expo Go desde App Store o Play Store antes de empezar.
✓
Setup
P0-01
Abrir Expo Go → Escanear QR del dev server
→ La pantalla de carga aparece, la app carga sin errores en rojo
✓
Setup
P0-02
Guardar un cambio en el código (ej: cambiar un texto)
→ La app actualiza automáticamente en el teléfono en menos de 3 segundos (Fast Refresh)
✓
Setup
P0-03
Verificar que la URL del backend responde
→ GET /health (o cualquier endpoint) retorna 200 desde el teléfono
✓
Setup
P0-04
Navegar entre las 4 tabs del bottom bar
→ Cada tab navega sin crash. Las tabs activas se destacan visualmente.
P1
Foundation — Auth & Dashboard Base
El usuario puede crear cuenta, iniciar sesión y ver su dashboard.
0/10
Registro & Login
✓
Happy path
P1-01
Ir a Registro → llenar email y contraseña válidos → tocar "Crear cuenta"
→ Redirige al dashboard. El nombre/email del usuario aparece en el menú.
✓
Edge case
P1-02
Intentar registrar con el mismo email dos veces
→ Mensaje de error: "Este email ya está en uso" (sin crash)
✓
Happy path
P1-03
Login con email y contraseña correctos
→ Redirige al dashboard. El estado de sesión persiste si cierras y abres la app.
✓
Edge case
P1-04
Login con contraseña incorrecta
→ Mensaje de error visible. No redirige al dashboard.
✓
Happy path
P1-05
Tocar "Olvidé mi contraseña" → ingresar email → tocar enviar
→ Mensaje de confirmación "Revisa tu correo". Email llega con link.
✓
Happy path
P1-06
Cerrar sesión desde el menú
→ Redirige a login. Abrir la app de nuevo muestra login (no dashboard).
✓
Edge case
P1-07
Abrir la app sin conexión a internet, con sesión activa
→ El dashboard carga (con datos en caché o pantalla de error amigable). No crash.
Dashboard
✓
Happy path
P1-08
Ver el dashboard con al menos un presupuesto creado
→ Cards de categoría visibles con barra de progreso, monto gastado y restante.
✓
Happy path
P1-09
Tocar la flecha "←" para ir al período anterior
→ Las fechas del período cambian. Los datos se actualizan para ese período.
✓
Happy path
P1-10
Estando en un período pasado, tocar "Período actual"
→ Vuelve al período actual con sus datos correctos.
P2
Budgets Core
Crear, editar y gestionar presupuestos por categoría.
0/9
✓
Happy path
P2-01
Usuario nuevo sin presupuestos → el wizard aparece automáticamente
→ El CTA "Crea tu primer presupuesto" es visible en el dashboard.
✓
Happy path
P2-02
Completar el wizard: seleccionar categorías y montos → confirmar
→ Los presupuestos aparecen en el dashboard con las barras de progreso en 0%.
✓
Happy path
P2-03
Tocar "+" → crear un presupuesto nuevo para una categoría
→ El presupuesto aparece en la lista inmediatamente sin recargar.
✓
Happy path
P2-04
Tocar un presupuesto → editar el monto → guardar
→ El nuevo monto y el porcentaje de progreso se actualizan al instante.
✓
Happy path
P2-05
Editar el nombre de una categoría
→ El nombre nuevo aparece en el presupuesto Y en todas las transacciones asociadas.
✓
Edge case
P2-06
Eliminar un presupuesto que tiene transacciones asociadas
→ Sheet de confirmación. Al confirmar: presupuesto y sus transacciones desaparecen.
✓
Happy path
P2-07
Cambiar el tipo de período a "día 15 del mes"
→ El navegador de período muestra fechas "15 ene – 14 feb" en lugar de "1–31 ene".
✓
Happy path
P2-08
Ir al siguiente mes (sin presupuestos) → tocar "Copiar del mes anterior"
→ Los presupuestos del mes anterior aparecen en el mes nuevo con los mismos montos.
✓
Happy path
P2-09
Cambiar la moneda predeterminada en configuración
→ Los montos en el dashboard cambian al símbolo de la nueva moneda.
P3
Transactions Core
Registrar, buscar, editar y categorizar transacciones.
0/10
✓
Happy path
P3-01
Tocar el FAB "+" → llenar el formulario de gasto → guardar
→ La transacción aparece en la lista. La barra de progreso del presupuesto afectado sube.
✓
Happy path
P3-02
Agregar 15+ transacciones → hacer scroll hasta el fondo de la lista
→ Más transacciones cargan automáticamente (infinite scroll). Sin botón "Ver más".
✓
Happy path
P3-03
Escribir un texto en el buscador
→ La lista se filtra en tiempo real mostrando solo coincidencias. Borrar el texto restaura la lista completa.
✓
Happy path
P3-04
Tocar una transacción → editar el monto → guardar
→ El monto actualizado aparece en la lista. El presupuesto afectado recalcula su progreso.
✓
Happy path
P3-05
Deslizar una transacción a la izquierda (swipe) → confirmar eliminar
→ Transacción desaparece. La barra del presupuesto baja el monto correspondiente.
✓
Edge case
P3-06
Agregar una transacción sin asignar categoría
→ Aparece en la sección "Sin categoría" del dashboard. No impacta ningún presupuesto.
✓
Happy path
P3-07
Desde "Sin categoría", asignar una categoría a una transacción
→ Desaparece de "Sin categoría". Aparece en transacciones recientes y el presupuesto sube.
✓
Happy path
P3-08
Ver el dashboard con transacciones sin categoría pendientes
→ Banner visible al tope con el número de pendientes. Tap lleva a la sección.
✓
Edge case
P3-09
Agregar una transacción y asignarla a una categoría que no tiene presupuesto
→ Se ofrece crear un nuevo presupuesto para esa categoría en el mismo flujo.
✓
Edge case
P3-10
Intentar enviar el formulario de nueva transacción sin monto
→ Error de validación visible en el campo. No se envía al servidor.
P4
Gmail / Penny Integration
Conectar Gmail y verificar que Penny detecta transacciones end-to-end.
0/8
Requiere Development Build — Expo Go ya no sirve
El OAuth nativo de Google no funciona en Expo Go. Necesitas el .apk o .ipa generado por EAS instalado en tu teléfono.
✓
Happy path
P4-01
Tocar "Conectar Gmail" → se abre Chrome/Safari nativo (no un WebView dentro del app)
→ El browser del sistema se abre con la pantalla de autorización de Google.
✓
Happy path
P4-02
Autorizar acceso a Gmail en Google → la app retoma automáticamente
→ El app vuelve al primer plano via deep link. El header muestra "Gmail conectado ✓".
✓
E2E real
P4-03
Enviar un email de prueba al Gmail conectado simulando un aviso bancario (con monto y descripción)
→ En menos de 2 minutos, la transacción aparece en la sección "Sin categoría" del dashboard.
✓
Happy path
P4-04
Ver el indicador de estado en el header del dashboard
→ Muestra uno de los 3 estados: "Conectado" / "Sincronizando" / "Error" con el ícono correspondiente.
✓
Happy path
P4-05
Ir a Gmail Settings → tocar "Pausar monitoreo"
→ El estado cambia a "Pausado". Nuevos emails bancarios no generan transacciones.
✓
Happy path
P4-06
Tocar "Reanudar monitoreo"
→ El estado vuelve a "Conectado". Penny retoma la detección.
✓
Happy path
P4-07
Tocar "Desconectar cuenta Gmail" → confirmar
→ La cuenta desaparece de Gmail Settings. El header no muestra estado de Gmail.
✓
Edge case
P4-08
Cancelar el OAuth de Google (tocar "Atrás" en el browser)
→ El app regresa sin cambios. No hay error ni crash. Gmail sigue desconectado.
P5
Push Notifications & Native Mobile
Notificaciones de presupuesto, biometría y preferencias.
0/10
Requiere nuevo Development Build con módulos nativos
expo-notifications y expo-local-authentication deben estar en el binario. EAS Build necesita las credenciales FCM/APNs cargadas.
Push Notifications
✓
Happy path
P5-01
Primera vez que abres la app → aparece el diálogo de permisos de notificación del OS
→ Diálogo nativo de iOS/Android visible. Al aceptar, el push token se registra en el backend.
✓
E2E real
P5-02
Gastar el 80%+ de una categoría (vía email bancario o manualmente) y cerrar la app
→ Llega una notificación push con el nombre de la categoría y el porcentaje gastado.
✓
E2E real
P5-03
Superar el 100% de una categoría
→ Llega una notificación urgente ("Presupuesto agotado"). Es visualmente diferente a la de 80%.
✓
Happy path
P5-04
Tocar la notificación push mientras la app está en segundo plano
→ La app abre directamente en la pantalla del presupuesto afectado (deep link de notificación).
✓
Happy path
P5-05
En Configuración → Notificaciones → desactivar para una categoría específica → gastar >80%
→ No llega push para esa categoría. Las demás categorías sí siguen recibiendo notificaciones.
✓
Happy path
P5-06
Cambiar el umbral de una categoría de 80% a 50% → gastar 55% de esa categoría
→ Llega notificación al pasar el 50% (el umbral nuevo, no el 80% anterior).
Biometría
✓
Happy path
P5-07
En Configuración → Seguridad → activar Face ID / Touch ID
→ La próxima vez que abras la app, aparece el diálogo biométrico del OS en lugar de la pantalla de login.
✓
Edge case
P5-08
Fallar la biometría 3 veces
→ El OS bloquea biometría y aparece la opción de ingresar con PIN o contraseña.
✓
Edge case
P5-09
JWT expirado (simular vaciando SecureStore) + biometría activa
→ La biometría no desbloquea. Redirige al login completo con email y contraseña.
✓
Happy path
P5-10
Configurar PIN de 6 dígitos → cerrar app → abrir → ingresar PIN
→ PIN correcto desbloquea la app. PIN incorrecto muestra error. 5 intentos fallidos → login completo.
P6
Polish & Advanced Features
Drag & drop, offline, temas y exportación de datos.
0/8
✓
Happy path
P6-01
Mantener presionado un presupuesto y arrastrarlo a otra posición
→ El orden se actualiza visualmente. Al recargar la app, el nuevo orden persiste.
✓
E2E real
P6-02
Desactivar WiFi y datos → agregar una transacción
→ La transacción se guarda localmente con un badge "Pendiente de sync". La app no crashea.
✓
E2E real
P6-03
Reactivar WiFi (con la transacción offline pendiente)
→ La transacción se sincroniza automáticamente. El badge "Pendiente" desaparece. Aparece en el servidor.
✓
Happy path
P6-04
Tocar "Exportar datos" en el menú
→ El Share Sheet nativo de iOS/Android se abre con el archivo JSON listo para compartir o guardar.
✓
Happy path
P6-05
Activar tema claro desde el menú
→ Toda la UI cambia a modo claro. Texto, fondos y botones son legibles. La preferencia persiste al reabrir.
✓
Happy path
P6-06
Copiar presupuestos del período anterior al actual
→ Todos los presupuestos del mes anterior aparecen en el mes actual con los mismos montos.
✓
Edge case
P6-07
Limpiar todas las transacciones desde el menú
→ Confirmación explícita requerida. Al confirmar: lista vacía y barras de progreso en 0%.
✓
Edge case
P6-08
Agregar 3 transacciones offline → cerrar la app → reabrir sin conexión → reconectar
→ Las 3 transacciones siguen pendientes al reabrir. Al reconectar, las 3 se sincronizan correctamente.