434 lines
14 KiB
Markdown
434 lines
14 KiB
Markdown
# 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
|