- Updated docs and inventory files - Added new architecture docs Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.4 KiB
US-MAI006-011: Configurar dispositivo GPS
Metadata
| Campo | Valor |
|---|---|
| ID | US-MAI006-011 |
| Epica | EPIC-MAI-006 - Tracking en Tiempo Real |
| Modulo | tracking |
| Prioridad | P1 |
| Story Points | 5 |
| Sprint | Por asignar |
| Estado | Backlog |
Historia de Usuario
Como jefe de flota de una empresa transportista, quiero vincular un dispositivo GPS a una unidad de transporte, para poder rastrear la ubicacion de la unidad en tiempo real y registrar su historial de posiciones.
Descripcion Detallada
La configuracion de dispositivos GPS es fundamental para habilitar el tracking de unidades. El jefe de flota debe poder registrar la informacion del dispositivo (IMEI, proveedor, modelo) y asociarlo a una unidad especifica de la flota. Un dispositivo solo puede estar asociado a una unidad a la vez, pero puede reasignarse cuando se requiera (por ejemplo, al dar de baja una unidad o al reemplazar un dispositivo danado).
El sistema debe soportar multiples proveedores GPS (Traccar, Wialon, Samsara, Geotab) y permitir configurar el identificador del dispositivo en el sistema del proveedor para que las posiciones entrantes se asocien correctamente a la unidad.
Al vincular un dispositivo, el sistema debe intentar obtener la ultima posicion conocida del proveedor para verificar la conectividad. El usuario puede configurar el intervalo de reporte esperado (por ejemplo, cada 30 segundos) que se utilizara para detectar cuando un dispositivo deja de reportar.
Criterios de Aceptacion
Escenario 1: Vincular nuevo dispositivo GPS a unidad
Dado que el jefe de flota tiene permisos de gestion de flota y existe una unidad sin dispositivo GPS asignado,
Cuando selecciona la unidad, ingresa el IMEI del dispositivo, selecciona el proveedor GPS, ingresa el ID externo (en el sistema del proveedor), selecciona el intervalo de reporte y confirma la vinculacion,
Entonces el sistema crea el registro en tracking.gps_devices con los datos ingresados, marca el dispositivo como activo, y muestra mensaje de exito con la informacion del dispositivo vinculado.
Escenario 2: Validacion de IMEI unico por tenant
Dado que ya existe un dispositivo con IMEI "352093088937641" registrado para el tenant, Cuando el usuario intenta registrar otro dispositivo con el mismo IMEI, Entonces el sistema muestra error indicando que el IMEI ya esta registrado y no permite la creacion.
Escenario 3: Verificar conectividad al vincular
Dado que el usuario esta vinculando un dispositivo con proveedor "traccar", Cuando confirma la vinculacion, Entonces el sistema intenta obtener la ultima posicion del dispositivo desde el proveedor y muestra: (a) "Dispositivo conectado - Ultima posicion: [fecha/hora]" si obtiene respuesta exitosa, o (b) "Dispositivo sin conexion reciente - Verificar configuracion" si no obtiene posicion.
Escenario 4: Reasignar dispositivo a otra unidad
Dado que existe un dispositivo GPS actualmente asignado a la Unidad A,
Cuando el usuario selecciona el dispositivo y lo reasigna a la Unidad B,
Entonces el sistema actualiza el unidad_id del dispositivo, registra el cambio en el historial (audit log), y las nuevas posiciones se asocian a la Unidad B.
Escenario 5: Desactivar dispositivo GPS
Dado que existe un dispositivo GPS activo asignado a una unidad,
Cuando el usuario desactiva el dispositivo,
Entonces el sistema marca activo = FALSE, deja de procesar posiciones de ese IMEI, y la unidad queda disponible para asignar otro dispositivo.
Tareas Tecnicas
- Database: Verificar que existe la tabla
tracking.gps_devicescon campos: id, tenant_id, unidad_id, imei, proveedor, device_id_externo, nombre, modelo, sim_numero, sim_operador, intervalo_segundos, activo, ultima_posicion_at. Crear indices idx_gps_device_tenant, idx_gps_device_imei (unique), idx_gps_device_unidad. - Backend: Crear entity
GpsDevicemapeada atracking.gps_devices. CrearGpsDeviceServicecon metodos: create(), findByImei(), findByUnidad(), update(), deactivate(), verifyConnectivity(). CrearGpsDeviceControllercon endpoints CRUD. Crear DTOs: CreateGpsDeviceDto, UpdateGpsDeviceDto. - Frontend: Crear componente
GpsDeviceFormcon campos: unidadId (selector), imei, proveedor (dropdown: traccar, wialon, samsara, geotab, manual), deviceIdExterno, nombre, modelo, simNumero, simOperador, intervaloSegundos (default 30). Agregar seccion de dispositivo GPS en la ficha de unidad. - Integration: Implementar metodo
verifyConnectivity()que llame al adapter del proveedor para obtener ultima posicion. - Tests: Tests unitarios del servicio. Tests de integracion de endpoints. Tests de validacion de IMEI unico.
Dependencias
- Depende de: MAI-011 (Gestion de Flota - unidades), MAI-001 (Auth - permisos)
- Bloquea: US-MAI006-012 (recibir posiciones), US-MAI006-014 (cambiar proveedor)
Notas Tecnicas
- Endpoint: POST
/api/tracking/gps-devices - Entity:
GpsDevice->tracking.gps_devices - RLS: Politica
tenant_isolation_gps_devicesfiltra portenant_id = current_setting('app.tenant_id')::uuid - Proveedores soportados: traccar, wialon, samsara, geotab, manual
- IMEI: Unique constraint por tenant (un mismo IMEI puede existir en diferentes tenants)
- Intervalo default: 30 segundos
- Soft delete: Se desactiva con
activo = FALSE, no se elimina fisicamente
US-MAI006-011 - ERP Transportistas v1.0.0