Renombrar FlotillasGPS a ADAN en todo el proyecto
This commit is contained in:
232
docs/plans/2026-01-21-adan-design.md
Normal file
232
docs/plans/2026-01-21-adan-design.md
Normal file
@@ -0,0 +1,232 @@
|
||||
# Sistema de Monitoreo de ADAN GPS + IA
|
||||
|
||||
## Resumen Ejecutivo
|
||||
|
||||
Sistema completo de monitoreo de adan vehiculares con rastreo GPS en tiempo real, video streaming, integración con dispositivos Meshtastic, y app móvil para conductores. Diseñado para escala pequeña (1-20 vehículos) con arquitectura preparada para crecimiento futuro.
|
||||
|
||||
**Fecha:** 2026-01-21
|
||||
**Estado:** Pendiente de aprobación
|
||||
|
||||
---
|
||||
|
||||
## Decisiones de Diseño
|
||||
|
||||
| Aspecto | Decisión |
|
||||
|---------|----------|
|
||||
| Escala inicial | Pequeña (1-20 vehículos) |
|
||||
| Dispositivos GPS | Traccar-compatible (protocolo abierto) |
|
||||
| Meshtastic | Módulo experimental/opcional |
|
||||
| App móvil | React Native para conductores |
|
||||
| Despliegue | VM única en Proxmox (Ubuntu 22.04) |
|
||||
| Acceso web | Cloudflare Zero Trust Tunnel |
|
||||
| GPS hardware | Puerto TCP 5055 abierto |
|
||||
| IA/ML | Básico ahora, arquitectura preparada |
|
||||
| Backend | Python/FastAPI |
|
||||
| Frontend | React + TypeScript + TailwindCSS |
|
||||
| Base de datos | PostgreSQL + TimescaleDB |
|
||||
| Cache | Redis |
|
||||
| Video | MediaMTX (RTSP/WebRTC/HLS) |
|
||||
| Usuarios | Solo admin (sin multi-tenant) |
|
||||
|
||||
---
|
||||
|
||||
## Arquitectura General
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ PROXMOX - VM ÚNICA │
|
||||
│ (Ubuntu 22.04 LTS) │
|
||||
│ RAM: 4-8GB | CPU: 4 cores │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||||
│ │ CLOUDFLARED (Tunnel) │ │
|
||||
│ │ adan.tudominio.com → localhost │ │
|
||||
│ └─────────────────────┬───────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────────┴──────────────┐ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌───────────┐ ┌───────────┐ │
|
||||
│ │ React │ │ FastAPI │ │
|
||||
│ │ Frontend │ │ Backend │ │
|
||||
│ │ :3000 │ │ :8000 │ │
|
||||
│ └───────────┘ └─────┬─────┘ │
|
||||
│ │ │
|
||||
│ ┌─────────────┤ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌───────────┐ ┌─────────────────────────┐ │
|
||||
│ │ Traccar │ │ PostgreSQL + TimescaleDB │ │
|
||||
│ │ Server │ │ Redis │ │
|
||||
│ │ :5055 ◄──┼──┼─────────────────────────┘ │
|
||||
│ └─────┬─────┘ │ │
|
||||
│ │ │ │
|
||||
└────────┼────────┼──────────────────────────────────────────────┘
|
||||
│ │
|
||||
▼ │
|
||||
┌──────────┐ │
|
||||
│ PUERTO │ │ Cloudflare Tunnel (HTTPS)
|
||||
│ TCP 5055 │ │
|
||||
│ (abierto)│ │
|
||||
└────┬─────┘ │
|
||||
│ │
|
||||
▼ ▼
|
||||
📡 GPS 📱 App 📻 Meshtastic 💻 Dashboard
|
||||
Hardware Móvil (opcional) Admin
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tablas Principales
|
||||
|
||||
- **vehiculos** - Información de vehículos
|
||||
- **conductores** - Datos de conductores
|
||||
- **dispositivos** - GPS y dispositivos asociados
|
||||
- **ubicaciones** (HYPERTABLE) - Posiciones GPS
|
||||
- **viajes** - Registro de viajes
|
||||
- **paradas** - Paradas durante viajes
|
||||
- **alertas** - Sistema de alertas
|
||||
- **geocercas** - Zonas geográficas
|
||||
- **pois** - Puntos de interés
|
||||
- **cargas_combustible** - Registro de cargas
|
||||
- **mantenimientos** - Programación de mantenimiento
|
||||
- **camaras** - Cámaras de video
|
||||
- **grabaciones** - Videos almacenados
|
||||
- **eventos_video** - Eventos detectados en video
|
||||
- **mensajes** - Comunicación admin-conductor
|
||||
- **configuracion** - Configuración del sistema
|
||||
- **audit_log** - Logs de auditoría
|
||||
|
||||
---
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Principales
|
||||
|
||||
```
|
||||
/api/v1
|
||||
├── /auth → Autenticación JWT
|
||||
├── /vehiculos → CRUD vehículos
|
||||
├── /conductores → CRUD conductores
|
||||
├── /ubicaciones → Recepción GPS + WebSocket
|
||||
├── /viajes → Gestión y replay de viajes
|
||||
├── /alertas → Centro de alertas
|
||||
├── /geocercas → Gestión de geocercas
|
||||
├── /pois → Puntos de interés
|
||||
├── /combustible → Registro de cargas
|
||||
├── /mantenimiento → Programación servicios
|
||||
├── /video → Streaming y grabaciones
|
||||
├── /reportes → Generación de reportes
|
||||
├── /meshtastic → Integración mesh (opcional)
|
||||
└── /configuracion → Settings del sistema
|
||||
|
||||
/ws/v1
|
||||
├── /ubicaciones → Stream tiempo real
|
||||
├── /alertas → Notificaciones push
|
||||
└── /video/{id} → Señalización WebRTC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Interfaces de Usuario
|
||||
|
||||
### Dashboard Web
|
||||
|
||||
- **Login** - Autenticación con tema oscuro
|
||||
- **Dashboard** - KPIs, mapa resumen, alertas, actividad
|
||||
- **Mapa** - Vista tiempo real con filtros y capas
|
||||
- **Flota** - Cards/tabla de vehículos y conductores
|
||||
- **Detalle vehículo** - Info completa, viajes, estadísticas
|
||||
- **Alertas** - Centro de gestión de alertas
|
||||
- **Video** - Grid de cámaras en vivo
|
||||
- **Grabaciones** - Búsqueda y reproducción
|
||||
- **Viajes** - Lista y replay con video sincronizado
|
||||
- **Geocercas** - Editor visual en mapa
|
||||
- **Reportes** - Generación y programación
|
||||
- **Configuración** - Settings del sistema
|
||||
|
||||
### App Móvil (Conductores)
|
||||
|
||||
- **Login** - Por teléfono + código
|
||||
- **Home** - Estado, botón iniciar viaje, resumen
|
||||
- **Viaje activo** - Mapa, próxima parada, controles
|
||||
- **Paradas** - Registro con tipo y notas
|
||||
- **Combustible** - Registro de cargas
|
||||
- **Mensajes** - Comunicación con admin
|
||||
- **Emergencia** - Botón SOS
|
||||
- **Perfil** - Estadísticas y configuración
|
||||
- **Cámara** - Dashcam opcional
|
||||
|
||||
---
|
||||
|
||||
## Seguridad
|
||||
|
||||
- JWT con refresh tokens (24h / 7 días)
|
||||
- API keys únicas por dispositivo
|
||||
- Rate limiting (100 req/min general, 1 req/seg ubicaciones)
|
||||
- Headers de seguridad (CSP, HSTS, X-Frame-Options)
|
||||
- Passwords hasheados con bcrypt
|
||||
- Datos sensibles encriptados (Fernet)
|
||||
- Logs de auditoría completos
|
||||
- Firewall UFW + Fail2ban
|
||||
- Cloudflare WAF y DDoS protection
|
||||
|
||||
---
|
||||
|
||||
## Despliegue
|
||||
|
||||
### Requisitos Mínimos VM
|
||||
|
||||
- CPU: 4 cores
|
||||
- RAM: 8 GB
|
||||
- Disco Sistema: 60 GB SSD
|
||||
- Disco Videos: 2 TB HDD
|
||||
- OS: Ubuntu 22.04 LTS
|
||||
|
||||
### Servicios
|
||||
|
||||
- `adan-api.service` - Backend FastAPI
|
||||
- `adan-web.service` - Frontend React
|
||||
- `traccar.service` - Servidor GPS
|
||||
- `mediamtx.service` - Streaming video
|
||||
- `cloudflared.service` - Tunnel Cloudflare
|
||||
- `postgresql.service` - Base de datos
|
||||
- `redis.service` - Cache
|
||||
|
||||
### Puertos
|
||||
|
||||
- **5055/TCP** (abierto) - GPS devices
|
||||
- **5432** (interno) - PostgreSQL
|
||||
- **6379** (interno) - Redis
|
||||
- **8000** (interno) - API
|
||||
- **3000** (interno) - Frontend
|
||||
- **8554/8888/8889** (interno) - Video
|
||||
|
||||
---
|
||||
|
||||
## Entregables
|
||||
|
||||
1. **Código fuente completo** (backend, frontend, mobile)
|
||||
2. **Scripts de instalación automatizada**
|
||||
3. **Configuraciones de servicios**
|
||||
4. **Documentación técnica completa**
|
||||
5. **Guías de usuario (admin y conductor)**
|
||||
6. **API Reference**
|
||||
|
||||
---
|
||||
|
||||
## Repositorio
|
||||
|
||||
**URL:** https://git.consultoria-as.com
|
||||
**Nombre:** adan
|
||||
|
||||
---
|
||||
|
||||
## Aprobación
|
||||
|
||||
- [ ] Arquitectura aprobada
|
||||
- [ ] Modelo de datos aprobado
|
||||
- [ ] Diseño de interfaces aprobado
|
||||
- [ ] Plan de despliegue aprobado
|
||||
- [ ] Listo para implementación
|
||||
Reference in New Issue
Block a user