feat: Initial database structure for ERP Transportistas
- PostgreSQL 15 with PostGIS extension - 8 schemas for transport domain - ENUMs for viaje states, unit types, events - DDL documentation and conventions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
commit
c93e2b1e0e
140
ddl/00-schemas-init.sql
Normal file
140
ddl/00-schemas-init.sql
Normal file
@ -0,0 +1,140 @@
|
||||
-- =============================================================================
|
||||
-- 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
|
||||
-- =============================================================================
|
||||
60
ddl/README.md
Normal file
60
ddl/README.md
Normal file
@ -0,0 +1,60 @@
|
||||
# DDL - ERP Transportistas
|
||||
|
||||
Este directorio contiene los scripts DDL (Data Definition Language) para PostgreSQL.
|
||||
|
||||
## Estructura de Archivos
|
||||
|
||||
```
|
||||
ddl/
|
||||
├── 01-transport-schema-ddl.sql # OT, Embarques, Viajes, Paradas, POD
|
||||
├── 02-fleet-schema-ddl.sql # Unidades, Remolques, Operadores
|
||||
├── 03-tracking-schema-ddl.sql # Eventos GPS, Geocercas, Alertas
|
||||
├── 04-fuel-schema-ddl.sql # Combustible, Peajes, Gastos
|
||||
├── 05-maintenance-schema-ddl.sql # Mantenimiento, Ordenes de trabajo
|
||||
├── 06-carriers-schema-ddl.sql # Terceros, Documentos, Scorecard
|
||||
├── 07-billing-transport-ddl.sql # Tarifas, Facturacion, Recargos
|
||||
├── 08-compliance-schema-ddl.sql # Carta Porte, HOS, Inspecciones
|
||||
└── 99-rls-transport-modules.sql # Row Level Security
|
||||
```
|
||||
|
||||
## Orden de Ejecucion
|
||||
|
||||
1. Ejecutar DDL de erp-core primero (schemas base)
|
||||
2. Ejecutar archivos de este directorio en orden numerico
|
||||
|
||||
## Convencion de Nombres
|
||||
|
||||
- Tablas: snake_case, plural (ej: `ordenes_transporte`)
|
||||
- Indices: `idx_{tabla}_{columnas}`
|
||||
- Foreign Keys: `fk_{tabla}_{referencia}`
|
||||
- Constraints: `chk_{tabla}_{regla}`
|
||||
|
||||
## Multi-Tenancy
|
||||
|
||||
Todas las tablas incluyen:
|
||||
- `tenant_id UUID NOT NULL`
|
||||
- Indice compuesto con tenant_id
|
||||
- RLS policy para aislamiento
|
||||
|
||||
## Ejemplo de Tabla
|
||||
|
||||
```sql
|
||||
CREATE TABLE transport.ordenes_transporte (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL REFERENCES public.tenants(id),
|
||||
codigo VARCHAR(50) NOT NULL,
|
||||
-- ... mas columnas
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
created_by_id UUID NOT NULL,
|
||||
CONSTRAINT uq_ot_tenant_codigo UNIQUE (tenant_id, codigo)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_ot_tenant ON transport.ordenes_transporte(tenant_id);
|
||||
CREATE INDEX idx_ot_estado ON transport.ordenes_transporte(tenant_id, estado);
|
||||
|
||||
ALTER TABLE transport.ordenes_transporte ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
CREATE POLICY tenant_isolation ON transport.ordenes_transporte
|
||||
USING (tenant_id = current_setting('app.tenant_id')::uuid);
|
||||
```
|
||||
Loading…
Reference in New Issue
Block a user