# 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