# 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); ```