-- ============================================================================== -- 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).';