# EPIC-MAI-019: Apps Moviles por Perfil de Usuario **Proyecto:** ERP Construccion **ID:** EPIC-MAI-019 **Prioridad:** P1 **Story Points Totales:** 89 SP **Sprints Estimados:** Sprint 15-22 **Estado:** Documentado --- ## Objetivo de Negocio Digitalizar las operaciones en campo de las constructoras mediante aplicaciones moviles especializadas por perfil de usuario, permitiendo: 1. **Captura de datos en tiempo real** desde la obra 2. **Validacion biometrica** de asistencias con reconocimiento facial y huella 3. **Trabajo offline** con sincronizacion automatica 4. **Geolocalizacion** para validar presencia en sitio 5. **Reduccion de papel** en procesos de campo --- ## Perfiles de Usuario | Perfil | App | Modulo Base | Funcionalidad Principal | |--------|-----|-------------|-------------------------| | Checador | MOB-001 | MAI-007 | Registro biometrico de asistencias | | Almacenista | MOB-002 | MAI-004 | Control de inventario en obra | | Supervisor | MOB-003 | MAI-005 | Captura de avances y evidencia | | Capataz | MOB-004 | MAI-007 | Gestion de cuadrillas y destajo | | Derechohabiente | MOB-005 | MAI-010 | Consulta de avance de vivienda | --- ## Stack Tecnologico ```yaml framework: React Native 0.73+ platform: Expo 50 language: TypeScript 5.3+ state_management: Zustand 4.x navigation: React Navigation 6.x offline_storage: WatermelonDB sync: Background fetch + Queue biometrics: facial: expo-face-detector / AWS Rekognition fingerprint: expo-local-authentication camera: expo-camera location: expo-location push: Firebase Cloud Messaging ``` --- ## Apps Definidas ### MOB-001: App Checador Biometrico **Perfil:** Encargado de registro de asistencias **Story Points:** 21 SP **Prioridad:** P0 #### Funcionalidades | ID | Funcionalidad | SP | Descripcion | |----|---------------|---:|-------------| | F-MOB001-01 | Login con credenciales ERP | 3 | Autenticacion JWT | | F-MOB001-02 | Reconocimiento facial | 8 | Liveness detection + matching | | F-MOB001-03 | Huella dactilar | 5 | Biometria nativa del dispositivo | | F-MOB001-04 | Geolocalizacion GPS | 3 | Captura ubicacion al registrar | | F-MOB001-05 | Modo offline | 2 | Queue de registros pendientes | #### User Stories | US | Titulo | Criterios de Aceptacion | |----|--------|-------------------------| | US-MOB001-001 | Login con cuenta ERP | - Usuario ingresa credenciales
- Sistema valida contra API
- Almacena token local | | US-MOB001-002 | Check-in con reconocimiento facial | - Usuario selecciona check-in
- Sistema activa camara frontal
- Detecta rostro y valida liveness
- Compara con biometrico registrado
- Registra entrada con GPS y timestamp | | US-MOB001-003 | Check-in con huella dactilar | - Usuario selecciona check-in huella
- Sistema activa lector biometrico
- Valida huella contra registro
- Registra entrada con GPS | | US-MOB001-004 | Consultar historial asistencias | - Usuario ve lista de registros
- Filtra por fecha
- Ve detalles de cada registro | #### Pantallas ``` LoginScreen | v HomeScreen (Check-in/Check-out buttons) | +---> FacialRecognitionScreen | | | v | ResultScreen (Success/Fail) | +---> FingerprintScreen | | | v | ResultScreen | +---> HistoryScreen | v DetailScreen ``` --- ### MOB-002: App Almacenista **Perfil:** Encargado de almacen en obra **Story Points:** 18 SP **Prioridad:** P1 #### Funcionalidades | ID | Funcionalidad | SP | Descripcion | |----|---------------|---:|-------------| | F-MOB002-01 | Recepcion de materiales | 5 | Escaneo y registro de entradas | | F-MOB002-02 | Salida de materiales | 4 | Registro de entregas a obra | | F-MOB002-03 | Conteo fisico | 4 | Inventario con escaneo | | F-MOB002-04 | Escaneo de codigos | 3 | Barcode y QR scanner | | F-MOB002-05 | Modo offline | 2 | Sincronizacion diferida | #### User Stories | US | Titulo | Criterios de Aceptacion | |----|--------|-------------------------| | US-MOB002-001 | Recibir materiales | - Escanear codigo o buscar material
- Ingresar cantidad recibida
- Tomar foto de evidencia
- Asociar a OC si aplica | | US-MOB002-002 | Entregar materiales a obra | - Seleccionar material
- Ingresar cantidad
- Seleccionar destino (frente/cuadrilla)
- Registrar quien recibe | | US-MOB002-003 | Realizar conteo fisico | - Iniciar conteo de almacen
- Escanear o buscar items
- Registrar cantidades
- Generar diferencias | | US-MOB002-004 | Consultar existencias | - Buscar material
- Ver existencia actual
- Ver movimientos recientes | --- ### MOB-003: App Supervisor de Obra **Perfil:** Residente o supervisor de obra **Story Points:** 25 SP **Prioridad:** P0 #### Funcionalidades | ID | Funcionalidad | SP | Descripcion | |----|---------------|---:|-------------| | F-MOB003-01 | Captura de avances | 8 | Registro % avance por concepto | | F-MOB003-02 | Fotos geoetiquetadas | 5 | Evidencia con GPS embebido | | F-MOB003-03 | Checklist inspeccion | 4 | Listas de verificacion | | F-MOB003-04 | Bitacora digital | 4 | Registro de notas diarias | | F-MOB003-05 | Modo offline | 4 | Trabajo sin conexion | #### User Stories | US | Titulo | Criterios de Aceptacion | |----|--------|-------------------------| | US-MOB003-001 | Registrar avance de concepto | - Seleccionar proyecto/unidad
- Seleccionar concepto
- Ingresar % avance
- Adjuntar fotos
- Guardar con GPS | | US-MOB003-002 | Tomar fotos de evidencia | - Activar camara
- Tomar foto
- Sistema agrega GPS y timestamp
- Asociar a avance/incidencia | | US-MOB003-003 | Realizar inspeccion | - Seleccionar checklist
- Marcar items cumplidos
- Agregar observaciones
- Adjuntar fotos
- Firmar digital | | US-MOB003-004 | Registrar en bitacora | - Crear entrada de bitacora
- Agregar descripcion
- Seleccionar tipo (avance/incidencia/clima)
- Adjuntar multimedia | | US-MOB003-005 | Trabajar sin conexion | - App funciona sin internet
- Datos se guardan localmente
- Al recuperar conexion sincroniza
- Notifica conflictos si existen | #### Pantallas ``` LoginScreen | v ProjectSelectorScreen | v HomeScreen (Dashboard de proyecto) | +---> ProgressCaptureScreen | | | +---> UnitSelector | +---> ConceptSelector | +---> ProgressInput | +---> PhotoCapture | +---> InspectionScreen | | | +---> ChecklistView | +---> SignatureCapture | +---> DailyLogScreen | | | +---> EntryForm | +---> VoiceNote | +---> SyncStatusScreen | +---> PendingItems +---> ConflictResolution ``` --- ### MOB-004: App Capataz / Jefe de Cuadrilla **Perfil:** Capataz o jefe de cuadrilla **Story Points:** 16 SP **Prioridad:** P1 #### Funcionalidades | ID | Funcionalidad | SP | Descripcion | |----|---------------|---:|-------------| | F-MOB004-01 | Gestion de cuadrilla | 4 | Ver/asignar miembros | | F-MOB004-02 | Registro de destajo | 5 | Cantidades por trabajador | | F-MOB004-03 | Asignacion de trabajo | 4 | Distribuir conceptos | | F-MOB004-04 | Reporte productividad | 3 | Rendimientos del equipo | #### User Stories | US | Titulo | Criterios de Aceptacion | |----|--------|-------------------------| | US-MOB004-001 | Ver cuadrilla asignada | - Lista de trabajadores
- Estado de asistencia
- Contacto rapido | | US-MOB004-002 | Registrar destajo | - Seleccionar trabajador
- Seleccionar concepto
- Ingresar cantidad
- Calcular importe automatico | | US-MOB004-003 | Asignar trabajo | - Ver conceptos pendientes
- Asignar a trabajador/cuadrilla
- Definir meta | | US-MOB004-004 | Ver productividad | - Rendimiento por trabajador
- Avance vs programado
- Historico de destajo | --- ### MOB-005: App Derechohabiente (Mi Vivienda) **Perfil:** Cliente/derechohabiente INFONAVIT **Story Points:** 13 SP **Prioridad:** P2 #### Funcionalidades | ID | Funcionalidad | SP | Descripcion | |----|---------------|---:|-------------| | F-MOB005-01 | Consulta avance vivienda | 4 | Timeline de construccion | | F-MOB005-02 | Galeria de fotos | 2 | Evidencia fotografica | | F-MOB005-03 | Solicitar inspeccion | 3 | Agendar visita | | F-MOB005-04 | Documentos | 2 | Acceso a documentos legales | | F-MOB005-05 | Contacto soporte | 2 | Chat/llamada con asesor | #### User Stories | US | Titulo | Criterios de Aceptacion | |----|--------|-------------------------| | US-MOB005-001 | Ver avance de mi vivienda | - Timeline visual de avance
- Porcentaje por etapa
- Fecha estimada entrega | | US-MOB005-002 | Ver fotos de mi vivienda | - Galeria de fotos de avance
- Filtrar por fecha
- Zoom y descarga | | US-MOB005-003 | Solicitar inspeccion | - Seleccionar tipo inspeccion
- Elegir fecha/hora disponible
- Recibir confirmacion | | US-MOB005-004 | Descargar documentos | - Ver lista de documentos
- Descargar PDF
- Compartir | --- ## Requisitos No Funcionales ### Performance | Metrica | Objetivo | |---------|----------| | Tiempo de login | < 3 segundos | | Reconocimiento facial | < 2 segundos | | Sincronizacion | Background, no bloqueante | | Tamano app | < 50 MB | ### Compatibilidad | Plataforma | Version Minima | |------------|----------------| | Android | 9.0 (API 28) | | iOS | 14.0 | ### Seguridad - [ ] Almacenamiento encriptado de credenciales - [ ] Biometria con liveness detection - [ ] Tokens con expiracion - [ ] Certificado pinning para API - [ ] No almacenar datos sensibles en texto plano ### Offline - [ ] Funcionamiento completo sin conexion - [ ] Queue de operaciones pendientes - [ ] Sincronizacion automatica al reconectar - [ ] Resolucion de conflictos - [ ] Indicador visual de estado sync --- ## Arquitectura ### Estructura de Monorepo ``` apps/mobile/ ├── packages/ │ ├── core/ # Auth, API, Storage compartido │ │ ├── src/ │ │ │ ├── auth/ │ │ │ ├── api/ │ │ │ ├── storage/ │ │ │ └── sync/ │ │ └── package.json │ │ │ ├── biometrics/ # Facial + Fingerprint │ │ ├── src/ │ │ │ ├── facial/ │ │ │ ├── fingerprint/ │ │ │ └── hooks/ │ │ └── package.json │ │ │ ├── camera/ # Captura de fotos geoetiquetadas │ │ ├── src/ │ │ │ ├── GeotaggedCamera.tsx │ │ │ └── hooks/ │ │ └── package.json │ │ │ ├── offline/ # WatermelonDB + Sync │ │ ├── src/ │ │ │ ├── database/ │ │ │ ├── sync/ │ │ │ └── hooks/ │ │ └── package.json │ │ │ └── ui/ # Componentes compartidos │ ├── src/ │ │ ├── components/ │ │ └── theme/ │ └── package.json │ ├── apps/ │ ├── checador/ # MOB-001 │ │ ├── app/ │ │ ├── components/ │ │ └── package.json │ │ │ ├── almacen/ # MOB-002 │ │ ├── app/ │ │ ├── components/ │ │ └── package.json │ │ │ ├── supervisor/ # MOB-003 │ │ ├── app/ │ │ ├── components/ │ │ └── package.json │ │ │ ├── capataz/ # MOB-004 │ │ ├── app/ │ │ ├── components/ │ │ └── package.json │ │ │ └── cliente/ # MOB-005 │ ├── app/ │ ├── components/ │ └── package.json │ ├── package.json # Workspace root └── turbo.json # Turbo config ``` --- ## Dependencias con Modulos Backend | App | Modulos Backend | Endpoints Principales | |-----|-----------------|----------------------| | MOB-001 | MAI-001, MAI-007 | /auth, /asistencias, /personal | | MOB-002 | MAI-001, MAI-004 | /auth, /inventario, /movimientos | | MOB-003 | MAI-001, MAI-005 | /auth, /avances, /bitacora, /fotos | | MOB-004 | MAI-001, MAI-007 | /auth, /cuadrillas, /destajo | | MOB-005 | MAI-001, MAI-010 | /auth, /unidades, /documentos | --- ## Roadmap de Implementacion | Sprint | Apps | SP | Descripcion | |--------|------|---:|-------------| | Sprint 15 | Setup monorepo | 8 | Estructura base, packages core | | Sprint 16 | MOB-001 | 21 | Checador biometrico completo | | Sprint 17-18 | MOB-003 | 25 | Supervisor de obra | | Sprint 19 | MOB-002 | 18 | Almacenista | | Sprint 20 | MOB-004 | 16 | Capataz | | Sprint 21-22 | MOB-005 | 13 | Derechohabiente | --- ## Criterios de Aceptacion de la Epica ### Funcionales - [ ] 5 apps funcionando con login ERP - [ ] Reconocimiento facial operativo con > 95% precision - [ ] Huella dactilar integrada con biometria nativa - [ ] Geolocalizacion en todos los registros - [ ] Modo offline funcional en todas las apps - [ ] Sincronizacion automatica sin perdida de datos ### No Funcionales - [ ] Apps publicadas en App Store y Play Store - [ ] Tiempo de respuesta < 3 segundos - [ ] Crash rate < 1% - [ ] Compatibilidad verificada en Android 9+ e iOS 14+ ### Documentacion - [ ] Manual de usuario por app - [ ] Guia de configuracion biometrica - [ ] Troubleshooting de sincronizacion --- ## Riesgos y Mitigaciones | Riesgo | Probabilidad | Impacto | Mitigacion | |--------|--------------|---------|------------| | Precision facial baja | Media | Alto | Usar AWS Rekognition + liveness | | Problemas de sync | Alta | Alto | Queue robusta + conflict resolution | | Rechazo en stores | Media | Medio | Seguir guidelines estrictos | | Performance en dispositivos viejos | Media | Medio | Optimizar bundle size | --- ## Referencias - [FRONTEND_INVENTORY.yml](../../orchestration/inventarios/FRONTEND_INVENTORY.yml) - [Expo Documentation](https://docs.expo.dev/) - [WatermelonDB](https://nozbe.github.io/WatermelonDB/) - [React Navigation](https://reactnavigation.org/) --- **Creado por:** Requirements-Analyst **Fecha:** 2025-12-06 **Version:** 1.0.0