FlotillasGPS - Sistema completo de monitoreo de flotillas GPS

Sistema completo para monitoreo y gestion de flotas de vehiculos con:
- Backend FastAPI con PostgreSQL/TimescaleDB
- Frontend React con TypeScript y TailwindCSS
- App movil React Native con Expo
- Soporte para dispositivos GPS, Meshtastic y celulares
- Video streaming en vivo con MediaMTX
- Geocercas, alertas, viajes y reportes
- Autenticacion JWT y WebSockets en tiempo real

Documentacion completa y guias de usuario incluidas.
This commit is contained in:
FlotillasGPS Developer
2026-01-21 08:18:00 +00:00
commit 51d78bacf4
248 changed files with 50171 additions and 0 deletions

View File

@@ -0,0 +1,217 @@
"""
Schemas Pydantic para Reportes y Dashboard.
"""
from datetime import datetime
from typing import Any, Dict, List, Optional
from pydantic import Field
from app.schemas.base import BaseSchema
class DashboardResumen(BaseSchema):
"""Schema para datos del dashboard principal."""
# Contadores
total_vehiculos: int
vehiculos_activos: int
vehiculos_en_movimiento: int
vehiculos_detenidos: int
vehiculos_sin_señal: int
total_conductores: int
conductores_activos: int
# Alertas
alertas_pendientes: int
alertas_criticas: int
alertas_hoy: int
# Viajes de hoy
viajes_hoy: int
distancia_hoy_km: float
# Mantenimiento
mantenimientos_vencidos: int
mantenimientos_proximos: int
# Última actualización
actualizado_en: datetime
class DashboardGrafico(BaseSchema):
"""Schema para datos de gráficos del dashboard."""
# Distancia por día (últimos 7 días)
distancia_diaria: List[dict] # [{fecha, km}]
# Viajes por día (últimos 7 días)
viajes_diarios: List[dict] # [{fecha, cantidad}]
# Alertas por tipo (últimos 7 días)
alertas_por_tipo: List[dict] # [{tipo, cantidad}]
# Consumo de combustible (últimos 30 días)
consumo_combustible: List[dict] # [{fecha, litros}]
class ReporteRequest(BaseSchema):
"""Schema para solicitar generación de reporte."""
tipo: str = Field(
...,
pattern="^(viajes|alertas|combustible|mantenimiento|ubicaciones|resumen)$"
)
formato: str = Field(default="pdf", pattern="^(pdf|excel|csv)$")
fecha_inicio: datetime
fecha_fin: datetime
vehiculos_ids: Optional[List[int]] = None # None = todos
conductores_ids: Optional[List[int]] = None
parametros: Optional[Dict[str, Any]] = None
class ReporteResponse(BaseSchema):
"""Schema de respuesta de generación de reporte."""
id: str # UUID del reporte
tipo: str
formato: str
estado: str # pendiente, procesando, completado, error
archivo_url: Optional[str] = None
creado_en: datetime
completado_en: Optional[datetime] = None
error: Optional[str] = None
class ReporteViajesResumen(BaseSchema):
"""Schema para reporte de viajes."""
periodo_inicio: datetime
periodo_fin: datetime
total_viajes: int
distancia_total_km: float
tiempo_total_conduccion: str
velocidad_promedio: float
por_vehiculo: List[dict]
por_conductor: List[dict]
viajes: List[dict]
class ReporteAlertasResumen(BaseSchema):
"""Schema para reporte de alertas."""
periodo_inicio: datetime
periodo_fin: datetime
total_alertas: int
atendidas: int
pendientes: int
por_tipo: List[dict]
por_severidad: List[dict]
por_vehiculo: List[dict]
alertas: List[dict]
class ReporteCombustibleResumen(BaseSchema):
"""Schema para reporte de combustible."""
periodo_inicio: datetime
periodo_fin: datetime
total_litros: float
total_costo: float
rendimiento_promedio: float
por_vehiculo: List[dict]
cargas: List[dict]
class ReporteMantenimientoResumen(BaseSchema):
"""Schema para reporte de mantenimiento."""
periodo_inicio: datetime
periodo_fin: datetime
total_mantenimientos: int
completados: int
pendientes: int
vencidos: int
costo_total: float
por_tipo: List[dict]
por_vehiculo: List[dict]
mantenimientos: List[dict]
class ReporteUbicacionesResumen(BaseSchema):
"""Schema para reporte de ubicaciones/recorridos."""
periodo_inicio: datetime
periodo_fin: datetime
vehiculo_id: int
vehiculo_nombre: str
total_puntos: int
distancia_km: float
# Ruta en GeoJSON
ruta_geojson: dict
class EstadisticasFlota(BaseSchema):
"""Schema para estadísticas generales de la flota."""
periodo: str # diario, semanal, mensual
# Distancia
distancia_total_km: float
distancia_promedio_vehiculo_km: float
# Tiempo
tiempo_conduccion_total_horas: float
tiempo_ocioso_total_horas: float
# Combustible
combustible_total_litros: float
costo_combustible_total: float
rendimiento_promedio: float
# Alertas
alertas_total: int
alertas_por_vehiculo_promedio: float
# Mantenimiento
costo_mantenimiento_total: float
# Top vehículos
top_distancia: List[dict] # [{vehiculo_id, nombre, km}]
top_alertas: List[dict] # [{vehiculo_id, nombre, cantidad}]
top_combustible: List[dict] # [{vehiculo_id, nombre, litros}]
class KPIsFlota(BaseSchema):
"""Schema para KPIs de la flota."""
# Utilización
porcentaje_utilizacion: float # % de vehículos en uso
horas_promedio_uso_diario: float
# Eficiencia
km_por_litro_flota: float
costo_por_km: float
# Seguridad
alertas_por_1000km: float
excesos_velocidad_por_1000km: float
# Mantenimiento
porcentaje_mantenimientos_a_tiempo: float
costo_mantenimiento_por_km: float
# Disponibilidad
porcentaje_disponibilidad: float # % de tiempo operativo
# Comparación con periodo anterior
variacion_km: float # % vs periodo anterior
variacion_combustible: float
variacion_alertas: float
variacion_costo: float