-- =============================================================================
-- ERP TRANSPORTISTAS - Inicializacion de Schemas
-- =============================================================================
-- Archivo: 00-schemas-init.sql
-- Version: 1.0.0
-- Fecha: 2026-01-25
-- Descripcion: Crea los schemas especificos del giro transporte
-- =============================================================================

-- Extensiones requeridas
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "postgis";  -- Para geolocalizacion

-- =============================================================================
-- SCHEMAS DEL GIRO TRANSPORTE
-- =============================================================================

-- Schema principal de transporte
CREATE SCHEMA IF NOT EXISTS transport;
COMMENT ON SCHEMA transport IS 'Ordenes de transporte, embarques, viajes, POD';

-- Schema de flota
CREATE SCHEMA IF NOT EXISTS fleet;
COMMENT ON SCHEMA fleet IS 'Unidades, remolques, operadores, documentos';

-- Schema de tracking
CREATE SCHEMA IF NOT EXISTS tracking;
COMMENT ON SCHEMA tracking IS 'Eventos GPS, geocercas, alertas';

-- Schema de combustible y gastos
CREATE SCHEMA IF NOT EXISTS fuel;
COMMENT ON SCHEMA fuel IS 'Control de combustible, peajes, gastos de viaje';

-- Schema de mantenimiento
CREATE SCHEMA IF NOT EXISTS maintenance;
COMMENT ON SCHEMA maintenance IS 'Mantenimiento preventivo y correctivo de flota';

-- Schema de carriers (terceros)
CREATE SCHEMA IF NOT EXISTS carriers;
COMMENT ON SCHEMA carriers IS 'Gestion de transportistas subcontratados';

-- Schema de facturacion transporte
CREATE SCHEMA IF NOT EXISTS billing;
COMMENT ON SCHEMA billing IS 'Tarifas, facturacion, recargos especificos transporte';

-- Schema de cumplimiento normativo
CREATE SCHEMA IF NOT EXISTS compliance;
COMMENT ON SCHEMA compliance IS 'Carta Porte, HOS, inspecciones, NOM-087/068';

-- =============================================================================
-- TIPOS ENUMERADOS COMUNES
-- =============================================================================

-- Estados del viaje
CREATE TYPE transport.estado_viaje AS ENUM (
  'BORRADOR',
  'PLANEADO',
  'DESPACHADO',
  'EN_TRANSITO',
  'EN_DESTINO',
  'ENTREGADO',
  'CERRADO',
  'FACTURADO',
  'COBRADO',
  'CANCELADO'
);

-- Tipos de unidad
CREATE TYPE fleet.tipo_unidad AS ENUM (
  'TRACTORA',
  'REMOLQUE',
  'CAJA_SECA',
  'CAJA_REFRIGERADA',
  'PLATAFORMA',
  'TANQUE',
  'PORTACONTENEDOR',
  'TORTON',
  'RABON',
  'CAMIONETA'
);

-- Estados de unidad
CREATE TYPE fleet.estado_unidad AS ENUM (
  'DISPONIBLE',
  'EN_VIAJE',
  'EN_TALLER',
  'BLOQUEADA',
  'BAJA'
);

-- Tipos de evento tracking
CREATE TYPE tracking.tipo_evento AS ENUM (
  'SALIDA',
  'ARRIBO_ORIGEN',
  'INICIO_CARGA',
  'FIN_CARGA',
  'ARRIBO_DESTINO',
  'INICIO_DESCARGA',
  'FIN_DESCARGA',
  'ENTREGA_POD',
  'DESVIO',
  'PARADA',
  'INCIDENTE',
  'GPS_POSICION'
);

-- Fuente del evento
CREATE TYPE tracking.fuente_evento AS ENUM (
  'GPS',
  'APP_OPERADOR',
  'SISTEMA',
  'MANUAL',
  'GEOCERCA'
);

-- Tipos de incidencia
CREATE TYPE transport.tipo_incidencia AS ENUM (
  'RETRASO',
  'RECHAZO',
  'DANO',
  'ROBO',
  'FALTANTE',
  'DEVOLUCION',
  'ACCIDENTE',
  'MULTA',
  'OTRO'
);

-- Modalidad de servicio
CREATE TYPE transport.modalidad_servicio AS ENUM (
  'FTL',  -- Full Truck Load
  'LTL',  -- Less Than Truck Load
  'DEDICADO',
  'EXPRESS',
  'CONSOLIDADO'
);

-- =============================================================================
-- FIN DE INICIALIZACION
-- =============================================================================
