53 lines
2.8 KiB
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).';
|