almeira-web/transporte-cali-buenaventura/backend/migrations/001_create_cierres_facturacion_mensual.sql

53 lines
2.8 KiB
SQL

-- ==============================================================================
-- Migración 001: Esquema de Consolidación y Facturación Mensual de Comisiones
-- Tabla: cierres_facturacion_mensual
-- Plataforma: Pacific Trans GO (Transporte Cali - Buenaventura)
-- ==============================================================================
-- 1. Crear Tipo Enumerado para el Estado de Facturación (si no existe)
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'estado_facturacion_cierre_enum') THEN
CREATE TYPE estado_facturacion_cierre_enum AS ENUM (
'pendiente_proceso',
'facturado_manual',
'enviado_api'
);
END IF;
END $$;
-- 2. Crear Tabla de Cierres de Facturación Mensual
CREATE TABLE IF NOT EXISTS cierres_facturacion_mensual (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
conductor_id VARCHAR(64) NOT NULL,
nit_o_cedula VARCHAR(64) NOT NULL,
razon_social VARCHAR(255) NOT NULL,
correo_electronico VARCHAR(255) NOT NULL,
mes_calendario INTEGER NOT NULL CHECK (mes_calendario BETWEEN 1 AND 12),
anio_calendario INTEGER NOT NULL CHECK (anio_calendario >= 2020),
total_comisiones_acumuladas NUMERIC(14, 2) NOT NULL DEFAULT 0.00,
total_viajes_realizados INTEGER NOT NULL DEFAULT 0 CHECK (total_viajes_realizados >= 0),
estado_facturacion estado_facturacion_cierre_enum NOT NULL DEFAULT 'pendiente_proceso',
fecha_cierre TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- Restricción de unicidad: Un conductor solo tiene un corte oficial por mes y año
CONSTRAINT uq_cierre_conductor_mes_anio UNIQUE (conductor_id, mes_calendario, anio_calendario)
);
-- 3. Índices de rendimiento para consultas del Administrador y Exportación DIAN
CREATE INDEX IF NOT EXISTS idx_cierres_mes_anio
ON cierres_facturacion_mensual (mes_calendario, anio_calendario);
CREATE INDEX IF NOT EXISTS idx_cierres_estado_facturacion
ON cierres_facturacion_mensual (estado_facturacion);
CREATE INDEX IF NOT EXISTS idx_cierres_conductor
ON cierres_facturacion_mensual (conductor_id);
-- 4. Comentarios informativos sobre el diseño de la tabla
COMMENT ON TABLE cierres_facturacion_mensual IS 'Consolidado mensual de comisiones cobradas a conductores por uso de la plataforma para facturación DIAN.';
COMMENT ON COLUMN cierres_facturacion_mensual.total_comisiones_acumuladas IS 'Suma acumulada ÚNICAMENTE de comisiones de intermediación de software retenidas o cobradas, NUNCA la tarifa bruta de los viajes.';
COMMENT ON COLUMN cierres_facturacion_mensual.estado_facturacion IS 'Estado de gestión fiscal: pendiente_proceso, facturado_manual (portal DIAN) o enviado_api (proveedor tecnológico).';