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