erp-transportistas-v2/docs/02-definicion-modulos/MAI-006-tracking/historias-usuario/US-MAI006-020-tomar-fotos-evidencia.md
Adrian Flores Cortes 6ed7f9e2ec [BACKUP] Pre-restructure workspace backup 2026-01-29
- Updated docs and inventory files
- Added new architecture docs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 17:35:54 -06:00

12 KiB

US-MAI006-020: Tomar Fotos con Evidencia GPS Offline

Modulo: MAI-006-tracking Version: 1.0.0 Fecha: 2026-01-27 Story Points: 5 Prioridad: MEDIA


Descripcion

Como conductor, Quiero tomar fotos de evidencia (carga, sellos, danos, entrega) que incluyan automaticamente informacion GPS y timestamp, Para documentar visualmente el estado de la mercancia y tener evidencia con ubicacion y fecha verificables, incluso sin conexion.


Actor Principal

Operador / Conductor


Precondiciones

  1. El conductor tiene un viaje activo
  2. El dispositivo tiene camara funcional
  3. Hay suficiente almacenamiento local (>100 MB)
  4. Los permisos de camara y ubicacion estan otorgados

Criterios de Aceptacion

CA-1: Captura de foto sin conexion

Given el conductor esta sin conexion a internet And necesita documentar evidencia When abre la camara desde la app Then puede tomar fotos normalmente And las fotos se guardan localmente And se muestran en la galeria de evidencias del viaje

CA-2: Metadata GPS automatica

Given el conductor toma una foto And el GPS del dispositivo esta activo When la foto se guarda Then se captura automaticamente:

  • Latitud y longitud
  • Precision del GPS (en metros)
  • Altitud (si disponible)
  • Rumbo/Heading (si disponible) And esta informacion se almacena junto con la foto

CA-3: Timestamp inmutable

Given el conductor toma una foto When la foto se procesa Then se registra:

  • Fecha y hora del dispositivo
  • Timezone del dispositivo
  • Timestamp en formato UTC And el timestamp no puede ser modificado posteriormente

CA-4: Categorizacion de fotos

Given el conductor toma una foto When guarda la foto Then debe seleccionar una categoria:

  • Carga (estado de mercancia al cargar)
  • Descarga (estado de mercancia al descargar)
  • Sello (numero de sello)
  • Dano (evidencia de dano)
  • Incidencia (accidente, obstruccion, etc.)
  • Documentos (remision, guia, etc.)
  • Otro (especificar)

CA-5: Notas opcionales en foto

Given el conductor ha tomado una foto When la esta guardando Then puede agregar notas de texto (opcional)

  • Maximo 500 caracteres
  • Descripcion de lo que muestra la foto
  • Numero de sello si aplica

CA-6: Compresion automatica

Given el conductor toma una foto de alta resolucion When la foto se procesa para almacenamiento Then se comprime automaticamente:

  • Resolucion maxima: 1920x1080
  • Calidad: 80%
  • Formato: JPEG
  • Tamano objetivo: <500 KB And se preserva la foto original si hay espacio

CA-7: Limite de fotos por viaje

Given el conductor ha tomado multiples fotos When alcanza el limite de 50 fotos por viaje Then la app muestra alerta "Limite de fotos alcanzado" And sugiere sincronizar para liberar espacio And no permite tomar mas fotos hasta sincronizar o eliminar

CA-8: Visualizacion de galeria offline

Given el conductor quiere revisar fotos tomadas When accede a la galeria de evidencias Then ve todas las fotos del viaje actual And puede ver la metadata de cada foto (GPS, fecha, categoria) And puede eliminar fotos no sincronizadas And no puede eliminar fotos ya sincronizadas


Flujo Principal

  1. Conductor selecciona "Tomar foto" o abre camara
  2. Sistema verifica permisos de camara y GPS
  3. Conductor encuadra y toma foto
  4. Sistema captura metadata (GPS, timestamp)
  5. Conductor selecciona categoria de foto
  6. Conductor agrega notas (opcional)
  7. Sistema comprime foto
  8. Sistema guarda foto localmente
  9. Sistema actualiza galeria y contador de pendientes

Flujo Alternativo: GPS No Disponible

  1. Conductor toma foto
  2. Sistema detecta que GPS no esta disponible
  3. Sistema muestra advertencia "Foto sin ubicacion GPS"
  4. Sistema permite guardar con metadata parcial
  5. Sistema marca foto como "SIN_GPS"
  6. Foto se sincroniza normalmente pero sin coordenadas

Flujo Alternativo: Almacenamiento Lleno

  1. Conductor intenta tomar foto
  2. Sistema detecta almacenamiento < 50 MB
  3. Sistema muestra alerta "Almacenamiento casi lleno"
  4. Sistema sugiere:
    • Sincronizar fotos pendientes
    • Eliminar fotos innecesarias
  5. Si almacenamiento < 10 MB: bloquea captura

Wireframe ASCII de Pantalla de Camara

+----------------------------------------------------------+
|  < Volver              CAPTURAR EVIDENCIA                |
+----------------------------------------------------------+
|                                                          |
|  +----------------------------------------------------+  |
|  |                                                    |  |
|  |                                                    |  |
|  |                                                    |  |
|  |                                                    |  |
|  |              [VISTA PREVIA CAMARA]                 |  |
|  |                                                    |  |
|  |                                                    |  |
|  |                                                    |  |
|  |                                                    |  |
|  +----------------------------------------------------+  |
|                                                          |
|  GPS: 25.6866, -100.3161 (5m)  |  27/01/2026 14:35     |
|                                                          |
+----------------------------------------------------------+
|                                                          |
|          [GALERIA]    ( O )    [FLASH]                  |
|                       CAPTURAR                          |
|                                                          |
+----------------------------------------------------------+

Post-Captura

+----------------------------------------------------------+
|  < Retomar             GUARDAR FOTO                      |
+----------------------------------------------------------+
|                                                          |
|  +----------------------------------------------------+  |
|  |                                                    |  |
|  |              [PREVIEW DE FOTO]                     |  |
|  |                                                    |  |
|  +----------------------------------------------------+  |
|                                                          |
|  Ubicacion: 25.6866, -100.3161                          |
|  Fecha: 27/01/2026 14:35:22                             |
|  Tamano: 342 KB                                          |
|                                                          |
+----------------------------------------------------------+
|  Categoria: *                                            |
|  +----------------------------------------------------+  |
|  |  [v] Seleccionar categoria...                      |  |
|  +----------------------------------------------------+  |
|  | ( ) Carga                                          |  |
|  | ( ) Descarga                                       |  |
|  | (o) Sello                                          |  |
|  | ( ) Dano                                           |  |
|  | ( ) Incidencia                                     |  |
|  | ( ) Documentos                                     |  |
|  | ( ) Otro                                           |  |
|  +----------------------------------------------------+  |
|                                                          |
|  Notas: (opcional)                                       |
|  +----------------------------------------------------+  |
|  | Sello #ABC12345                                    |  |
|  +----------------------------------------------------+  |
|                                                          |
+----------------------------------------------------------+
|                                                          |
|  [  DESCARTAR  ]    [======= GUARDAR =======]           |
|                                                          |
+----------------------------------------------------------+

Notas Tecnicas

Tecnologias Involucradas

Componente Tecnologia Proposito
Camara expo-camera / react-native-camera Captura de imagen
GPS expo-location Coordenadas
Compresion react-native-image-resizer Reducir tamano
Storage IndexedDB Almacenar blobs
EXIF piexifjs Metadata de imagen

Estructura de Foto Local

interface FotoEvidencia {
  id: string;                    // UUID generado localmente
  viajeId: string;               // ID del viaje
  paradaId: string | null;       // ID de la parada (si aplica)
  eventoId: string | null;       // ID del evento relacionado

  // Datos de la foto
  filename: string;              // nombre_uuid.jpg
  mimeType: string;              // image/jpeg
  sizeBytes: number;             // Tamano en bytes
  width: number;                 // Ancho en pixeles
  height: number;                // Alto en pixeles

  // Categoria y descripcion
  categoria: CategoriaFoto;
  notas: string | null;

  // Metadata GPS
  lat: number | null;
  lng: number | null;
  altitude: number | null;
  gpsAccuracy: number | null;
  heading: number | null;
  hasGPS: boolean;

  // Metadata temporal
  capturedAt: Date;
  timezone: string;

  // Referencias
  operadorId: string;
  dispositivoId: string;

  // Estado de sync
  syncStatus: 'PENDING' | 'UPLOADING' | 'SENT' | 'FAILED';
  syncProgress: number;          // 0-100 para uploads grandes
  syncAttempts: number;
  lastSyncError: string | null;

  // Timestamps
  createdAt: Date;
  updatedAt: Date;
  syncedAt: Date | null;
}

type CategoriaFoto =
  | 'CARGA'
  | 'DESCARGA'
  | 'SELLO'
  | 'DANO'
  | 'INCIDENCIA'
  | 'DOCUMENTOS'
  | 'OTRO';

Configuracion de Compresion

const PHOTO_CONFIG = {
  maxWidth: 1920,
  maxHeight: 1080,
  quality: 80,
  format: 'JPEG',
  rotation: 0,  // Auto-corregir orientacion

  // Limites
  maxSizeKB: 500,
  maxPhotosPerTrip: 50,
  maxStorageMB: 200,

  // Categorias que requieren mayor calidad
  highQualityCategories: ['DANO', 'DOCUMENTOS', 'SELLO']
};

Estrategia de Upload

// Fotos se suben con prioridad BAJA despues de eventos y firmas
// Upload en chunks para conexiones lentas
const UPLOAD_CONFIG = {
  chunkSize: 256 * 1024,  // 256 KB chunks
  maxConcurrent: 2,       // 2 uploads simultaneos
  retryAttempts: 5,
  retryDelay: 30000,      // 30 segundos entre reintentos

  // Si la foto es >1MB, usar upload resumable
  resumableThreshold: 1024 * 1024
};

Dependencias

Dependencia Tipo Descripcion
US-MAI006-016 Funcional Operar sin conexion
US-MAI006-017 Funcional Sincronizar al reconectar
US-MAI005-003 Funcional Evidencias de carga
US-MAI008-003 Funcional Evidencias de incidencia
expo-camera Tecnica Libreria de camara
expo-location Tecnica Libreria de GPS

Consideraciones de Privacidad

Aspecto Implementacion
Metadata Solo ubicacion y tiempo, no datos personales
Rostros No se requiere blur automatico (fotos de mercancia)
Retencion Fotos se eliminan del dispositivo post-sync
Acceso Solo el conductor y admins pueden ver fotos

Riesgos y Mitigaciones

Riesgo Probabilidad Impacto Mitigacion
Fotos muy grandes Media Medio Compresion automatica
GPS impreciso Alta Bajo Mostrar precision, permitir sin GPS
Almacenamiento lleno Media Alto Alertas proactivas, limites
Camara no funciona Baja Alto Mensaje de error claro
Foto borrosa Media Bajo Preview antes de guardar

Definition of Done

  • Captura de foto funciona sin conexion
  • Metadata GPS se captura automaticamente
  • Timestamp inmutable implementado
  • Categorias de foto funcionan
  • Notas opcionales implementadas
  • Compresion automatica configurada
  • Limite de 50 fotos por viaje
  • Galeria offline funciona
  • Upload con progreso visible
  • Pruebas con fotos de diferentes tamanos
  • Pruebas en condiciones de baja senal GPS

US-MAI006-020 v1.0.0 - erp-transportistas - Sistema SIMCO v4.0.0