add new
This commit is contained in:
103
RS_system/sql_colaboraciones.sql
Normal file
103
RS_system/sql_colaboraciones.sql
Normal file
@@ -0,0 +1,103 @@
|
||||
-- =============================================
|
||||
-- Script SQL: Módulo de Colaboraciones Económicas
|
||||
-- Descripción: Crea las tablas para gestionar colaboraciones mensuales
|
||||
-- Autor: Sistema
|
||||
-- Fecha: 2026-02-01
|
||||
-- =============================================
|
||||
|
||||
-- Tabla 1: Tipos de Colaboración (configurable)
|
||||
CREATE TABLE IF NOT EXISTS public.tipos_colaboracion
|
||||
(
|
||||
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
nombre character varying(100) COLLATE pg_catalog."default" NOT NULL,
|
||||
descripcion text COLLATE pg_catalog."default",
|
||||
monto_sugerido decimal(10, 2) NOT NULL DEFAULT 0,
|
||||
activo boolean NOT NULL DEFAULT true,
|
||||
orden integer NOT NULL DEFAULT 0,
|
||||
creado_en timestamp with time zone NOT NULL DEFAULT now(),
|
||||
actualizado_en timestamp with time zone NOT NULL DEFAULT now(),
|
||||
CONSTRAINT pk_tipos_colaboracion PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE public.tipos_colaboracion IS 'Catálogo de tipos de colaboración (Transporte, Limpieza, etc.)';
|
||||
COMMENT ON COLUMN public.tipos_colaboracion.nombre IS 'Nombre del tipo de colaboración';
|
||||
COMMENT ON COLUMN public.tipos_colaboracion.monto_sugerido IS 'Cuota sugerida mensual';
|
||||
COMMENT ON COLUMN public.tipos_colaboracion.orden IS 'Orden de presentación en UI';
|
||||
|
||||
-- Datos iniciales
|
||||
INSERT INTO public.tipos_colaboracion (nombre, descripcion, monto_sugerido, orden)
|
||||
VALUES
|
||||
('Transporte', 'Colaboración mensual para transporte', 1.00, 1),
|
||||
('Limpieza', 'Colaboración mensual para limpieza', 1.00, 2)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- =============================================
|
||||
|
||||
-- Tabla 2: Colaboraciones (cabecera de transacción)
|
||||
CREATE TABLE IF NOT EXISTS public.colaboraciones
|
||||
(
|
||||
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
miembro_id bigint NOT NULL,
|
||||
fecha_registro timestamp with time zone NOT NULL DEFAULT now(),
|
||||
monto_total decimal(10, 2) NOT NULL,
|
||||
observaciones text COLLATE pg_catalog."default",
|
||||
registrado_por character varying(100) COLLATE pg_catalog."default",
|
||||
creado_en timestamp with time zone NOT NULL DEFAULT now(),
|
||||
actualizado_en timestamp with time zone NOT NULL DEFAULT now(),
|
||||
CONSTRAINT pk_colaboraciones PRIMARY KEY (id),
|
||||
CONSTRAINT fk_colaboraciones_miembro FOREIGN KEY (miembro_id)
|
||||
REFERENCES public.miembros (id) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION
|
||||
ON DELETE RESTRICT
|
||||
);
|
||||
|
||||
COMMENT ON TABLE public.colaboraciones IS 'Registro de transacciones de colaboración';
|
||||
COMMENT ON COLUMN public.colaboraciones.miembro_id IS 'Miembro que realizó el pago';
|
||||
COMMENT ON COLUMN public.colaboraciones.monto_total IS 'Monto total de la transacción';
|
||||
COMMENT ON COLUMN public.colaboraciones.registrado_por IS 'Usuario que registró el pago';
|
||||
|
||||
-- Índices para optimizar búsquedas
|
||||
CREATE INDEX IF NOT EXISTS idx_colaboraciones_miembro ON public.colaboraciones(miembro_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_colaboraciones_fecha ON public.colaboraciones(fecha_registro);
|
||||
|
||||
-- =============================================
|
||||
|
||||
-- Tabla 3: Detalle de Colaboraciones (desglose mensual)
|
||||
CREATE TABLE IF NOT EXISTS public.detalle_colaboraciones
|
||||
(
|
||||
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
colaboracion_id bigint NOT NULL,
|
||||
tipo_colaboracion_id bigint NOT NULL,
|
||||
mes integer NOT NULL,
|
||||
anio integer NOT NULL,
|
||||
monto decimal(10, 2) NOT NULL,
|
||||
creado_en timestamp with time zone NOT NULL DEFAULT now(),
|
||||
CONSTRAINT pk_detalle_colaboraciones PRIMARY KEY (id),
|
||||
CONSTRAINT fk_detalle_colaboracion FOREIGN KEY (colaboracion_id)
|
||||
REFERENCES public.colaboraciones (id) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT fk_detalle_tipo FOREIGN KEY (tipo_colaboracion_id)
|
||||
REFERENCES public.tipos_colaboracion (id) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT chk_mes_valido CHECK (mes >= 1 AND mes <= 12),
|
||||
CONSTRAINT chk_anio_valido CHECK (anio >= 2000 AND anio <= 2100)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE public.detalle_colaboraciones IS 'Desglose mensual de cada colaboración';
|
||||
COMMENT ON COLUMN public.detalle_colaboraciones.mes IS 'Mes cubierto (1-12)';
|
||||
COMMENT ON COLUMN public.detalle_colaboraciones.anio IS 'Año cubierto';
|
||||
COMMENT ON COLUMN public.detalle_colaboraciones.monto IS 'Monto para este mes/tipo específico';
|
||||
|
||||
-- Índices para reportes y búsquedas
|
||||
CREATE INDEX IF NOT EXISTS idx_detalle_tipo ON public.detalle_colaboraciones(tipo_colaboracion_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_detalle_periodo ON public.detalle_colaboraciones(anio, mes);
|
||||
|
||||
-- Índice único para evitar duplicados (mismo mes/año/tipo en misma colaboración)
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_detalle_unico
|
||||
ON public.detalle_colaboraciones(colaboracion_id, tipo_colaboracion_id, mes, anio);
|
||||
|
||||
-- =============================================
|
||||
-- FIN DEL SCRIPT
|
||||
-- =============================================
|
||||
Reference in New Issue
Block a user