# 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<br>- Sistema valida contra API<br>- Almacena token local |
| US-MOB001-002 | Check-in con reconocimiento facial | - Usuario selecciona check-in<br>- Sistema activa camara frontal<br>- Detecta rostro y valida liveness<br>- Compara con biometrico registrado<br>- Registra entrada con GPS y timestamp |
| US-MOB001-003 | Check-in con huella dactilar | - Usuario selecciona check-in huella<br>- Sistema activa lector biometrico<br>- Valida huella contra registro<br>- Registra entrada con GPS |
| US-MOB001-004 | Consultar historial asistencias | - Usuario ve lista de registros<br>- Filtra por fecha<br>- 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<br>- Ingresar cantidad recibida<br>- Tomar foto de evidencia<br>- Asociar a OC si aplica |
| US-MOB002-002 | Entregar materiales a obra | - Seleccionar material<br>- Ingresar cantidad<br>- Seleccionar destino (frente/cuadrilla)<br>- Registrar quien recibe |
| US-MOB002-003 | Realizar conteo fisico | - Iniciar conteo de almacen<br>- Escanear o buscar items<br>- Registrar cantidades<br>- Generar diferencias |
| US-MOB002-004 | Consultar existencias | - Buscar material<br>- Ver existencia actual<br>- 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<br>- Seleccionar concepto<br>- Ingresar % avance<br>- Adjuntar fotos<br>- Guardar con GPS |
| US-MOB003-002 | Tomar fotos de evidencia | - Activar camara<br>- Tomar foto<br>- Sistema agrega GPS y timestamp<br>- Asociar a avance/incidencia |
| US-MOB003-003 | Realizar inspeccion | - Seleccionar checklist<br>- Marcar items cumplidos<br>- Agregar observaciones<br>- Adjuntar fotos<br>- Firmar digital |
| US-MOB003-004 | Registrar en bitacora | - Crear entrada de bitacora<br>- Agregar descripcion<br>- Seleccionar tipo (avance/incidencia/clima)<br>- Adjuntar multimedia |
| US-MOB003-005 | Trabajar sin conexion | - App funciona sin internet<br>- Datos se guardan localmente<br>- Al recuperar conexion sincroniza<br>- 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<br>- Estado de asistencia<br>- Contacto rapido |
| US-MOB004-002 | Registrar destajo | - Seleccionar trabajador<br>- Seleccionar concepto<br>- Ingresar cantidad<br>- Calcular importe automatico |
| US-MOB004-003 | Asignar trabajo | - Ver conceptos pendientes<br>- Asignar a trabajador/cuadrilla<br>- Definir meta |
| US-MOB004-004 | Ver productividad | - Rendimiento por trabajador<br>- Avance vs programado<br>- 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<br>- Porcentaje por etapa<br>- Fecha estimada entrega |
| US-MOB005-002 | Ver fotos de mi vivienda | - Galeria de fotos de avance<br>- Filtrar por fecha<br>- Zoom y descarga |
| US-MOB005-003 | Solicitar inspeccion | - Seleccionar tipo inspeccion<br>- Elegir fecha/hora disponible<br>- Recibir confirmacion |
| US-MOB005-004 | Descargar documentos | - Ver lista de documentos<br>- Descargar PDF<br>- 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
