# Prompt para Desarrollo de FleetCommand

## Contexto del Proyecto

Estoy desarrollando una aplicación de gestión de flotas GPS llamada **FleetCommand**. Esta aplicación consume datos de la plataforma 4sat.cl y los transforma en herramientas avanzadas de gestión.

## Información Técnica Clave

### Integración con 4sat.cl
La integración con 4sat.cl ya está desarrollada y funcionando. Incluye:
- Autenticación via email/password que retorna un `api_hash`
- Endpoints para obtener dispositivos, posiciones e histórico
- Sincronización bidireccional de datos de vehículos

**Credenciales de prueba:**
- Email: a3@4sat.cl
- Password: A32026@@@a
- API Base URL: https://app.4sat.cl/api/

**Servicio existente:** El archivo `foursat_service.py` ya implementa:
```python
class FourSatService:
    async def login() -> Dict  # Retorna api_hash
    async def get_devices() -> List[FourSatDevice]
    async def get_device_position(device_id) -> Dict
    async def get_device_history(device_id, date_from, date_to) -> List
    async def update_device(device_id, data) -> Dict
```

### Stack Tecnológico Base
- **Frontend:** React 18, TailwindCSS, Shadcn/UI
- **Backend:** FastAPI, MongoDB (Motor async)
- **Autenticación:** JWT
- **Email:** Brevo (Sendinblue)

### Base de Datos MongoDB
La aplicación ya tiene estas colecciones relacionadas:
- `os_vehiculos` - Vehículos con campo `foursat_id` para enlace
- `os_ordenes_servicio` - Órdenes de servicio
- `os_clientes` - Clientes
- `integraciones_config` - Configuración de 4sat (credenciales)

## Módulos a Desarrollar

### 1. Centro de Control (Command Center)
Mapa en tiempo real con:
- Posiciones de todos los vehículos
- Actualización automática (WebSocket o polling)
- Filtros por estado (movimiento, detenido, sin señal)
- Click en vehículo muestra panel de detalle
- Capas de mapa (satélite, tráfico, calles)

**Librerías sugeridas:**
- Leaflet.js o Mapbox GL para mapas
- Socket.io para tiempo real

### 2. Sistema de Alertas
Configuración de alertas por:
- Exceso de velocidad
- Entrada/salida de geocercas
- Detención prolongada
- Batería baja
- Sin señal GPS

Canales de notificación:
- Email (Brevo ya configurado)
- Push notifications (PWA)
- SMS (Twilio - por configurar)

### 3. Playback de Recorridos
- Reproductor animado de histórico
- Timeline con eventos
- Controles de velocidad (1x, 2x, 4x)
- Marcadores de detenciones y eventos

### 4. Constructor de Informes Personalizados
- Selector de columnas drag & drop
- Filtros por fecha, vehículo, conductor
- Cálculos personalizados (suma, promedio, fórmulas)
- Agrupación flexible
- Vista previa

**Formatos de exportación:**
- Excel (.xlsx) - usar openpyxl
- PDF - usar ReportLab o WeasyPrint
- CSV - built-in
- HTML - Jinja2
- KMZ (Google Earth) - usar simplekml

### 5. Generador de Certificados
Tipos de certificados:
- Instalación GPS
- Desinstalación
- Operatividad
- Kilometraje oficial
- Recorrido

Características:
- Logo de empresa configurable
- Firma digital (canvas ya implementado en órdenes)
- QR de verificación
- Envío automático por email

### 6. Geocercas
- Creación de zonas circulares y poligonales
- Configuración de alertas por zona
- Horarios permitidos
- Vehículos autorizados

### 7. Analytics Dashboard
KPIs:
- Kilometraje total/por vehículo
- Consumo estimado de combustible
- Horas de operación
- Score de conductores
- Eficiencia de flota

### 8. App Móvil (PWA)
Para técnicos/conductores:
- Vista de tareas asignadas
- Check-in/check-out en clientes
- Navegación integrada
- Captura de fotos
- Firma del cliente
- Modo offline

## Exportación KMZ

El formato KMZ es un ZIP que contiene un archivo KML. Ejemplo de estructura:

```python
import simplekml

kml = simplekml.Kml()

# Agregar puntos del recorrido
for punto in recorrido:
    pnt = kml.newpoint(
        name=f"{punto['hora']} - {punto['velocidad']} km/h",
        coords=[(punto['longitud'], punto['latitud'])]
    )
    pnt.description = f"""
        Vehículo: {punto['patente']}
        Velocidad: {punto['velocidad']} km/h
        Ignición: {'ON' if punto['ignicion'] else 'OFF'}
        Conductor: {punto['conductor']}
    """
    pnt.timestamp.when = punto['timestamp'].isoformat()
    
    # Color según estado
    if punto['velocidad'] > 100:
        pnt.style.iconstyle.color = simplekml.Color.red
    elif punto['velocidad'] > 0:
        pnt.style.iconstyle.color = simplekml.Color.green
    else:
        pnt.style.iconstyle.color = simplekml.Color.yellow

# Agregar línea de recorrido
linestring = kml.newlinestring(name="Ruta")
linestring.coords = [(p['longitud'], p['latitud']) for p in recorrido]
linestring.style.linestyle.color = simplekml.Color.blue
linestring.style.linestyle.width = 3

# Guardar como KMZ
kml.savekmz("recorrido.kmz")
```

## Prioridad de Implementación

1. **Informes y Exportación** (valor inmediato)
2. **KMZ para Google Earth** (diferenciador)
3. **Certificados** (formaliza el servicio)
4. **Centro de Control** (el más impactante visualmente)
5. **Alertas y Geocercas**
6. **Analytics**
7. **App Móvil**

## Notas Importantes

- La autenticación JWT ya está implementada
- El servicio de email Brevo está configurado y funcionando
- Los componentes UI de Shadcn están disponibles en `/frontend/src/components/ui/`
- El sistema ya maneja múltiples empresas (multi-tenant)
- Los vehículos tienen un campo `foursat_id` para relacionar con 4sat.cl

## Comando para Iniciar

```bash
# Instalar dependencias necesarias
pip install simplekml openpyxl weasyprint
yarn add leaflet react-leaflet recharts

# El proyecto ya tiene hot-reload configurado
# Backend: puerto 8001
# Frontend: puerto 3000
```

---

**Este prompt contiene toda la información necesaria para retomar el desarrollo de FleetCommand como proyecto independiente.**
