Agrego carpeta del source sql de la Base de Datos

This commit is contained in:
Pablo
2026-08-22 19:10:49 -03:00
parent 11e36bd6c2
commit 88d724fbcf
94 changed files with 7820 additions and 0 deletions
@@ -0,0 +1,80 @@
-- MIRROR — valores canónicos del seed (para leer qué expone el sistema).
-- El seed se APLICA por la migración:
-- supabase/migrations/20260604155956_seed_app_config.sql
-- Si cambiás el seed, hacelo en una migración y reflejá los valores acá.
-- Ver database/schema/README.md.
-- ============================================================================
-- seed: internal.app_config
-- ============================================================================
-- Pares clave/valor de configuración runtime. Cada clave es leída por las
-- funciones consumidoras vía internal.get_config_int(clave, default); si la
-- fila no existe, la función cae al default. Las filas de este seed existen
-- para que el operador pueda hacer override sin redeploy y para que la tabla
-- documente qué parámetros expone el sistema.
--
-- Convención:
-- - Una sección por dominio (retencion.*, pagos.*, etc.).
-- - El valor seedeado debe coincidir con el default que el consumidor pasa
-- a get_config_int. Si los dos divergen, el seed manda.
-- - ON CONFLICT DO NOTHING: idempotente y preserva overrides operativos.
-- Para reescribir un valor, hacer UPDATE explícito.
--
-- Stories asociadas:
-- - Documentation/Backlog/PoliticaRetencion.md US-R04 (sección retencion.*)
-- ============================================================================
-- ─── Retención operativa ────────────────────────────────────────────────────
-- Política: Documentation/PoliticaRetencion.md §3 (archivado) y §7 (higiene).
-- Unidad: meses. Consumidores: funciones de purga (US-R06..R09), validación
-- de registro de pagos (US-R10), y orquestación del pipeline mensual (US-R17).
INSERT INTO internal.app_config (clave, valor, descripcion) VALUES
('retencion.pagos_meses', '12',
'Ventana operativa de pagos en meses. Al cumplirse, el pago migra al archivo XLSX y se borra de la base.'),
('retencion.turnos_meses', '2',
'Antigüedad máxima de turnos pasados antes de purgarse (CASCADE arrastra reservas asociadas).'),
('retencion.eventos_pagos_meses', '3',
'Antigüedad máxima de eventos de pagos (prefijo pago_) antes de purgarse.'),
('retencion.eventos_otros_meses', '2',
'Antigüedad máxima del resto de eventos antes de purgarse.'),
('retencion.dias_especiales_meses', '1',
'Antigüedad máxima de días especiales pasados antes de purgarse (CASCADE arrastra horario_actividad_especial).')
ON CONFLICT (clave) DO NOTHING;
-- ─── Retención: cap de seguridad de eventos ─────────────────────────────────
-- Tope duro al tamaño de public.eventos. Unidad: filas (conteo, no meses).
-- Consumidor: internal.log_evento (US-R12). No es una ventana temporal: es un
-- freno contra un bug que dispare eventos en loop y consuma la cuota de la base
-- antes de la próxima purga mensual. Al alcanzarse, log_evento rechaza el insert
-- con excepción (no FIFO): el rechazo hace fallar la función que dispara el
-- evento y corta la cascada, en vez de borrar eventos legítimos en silencio.
INSERT INTO internal.app_config (clave, valor, descripcion) VALUES
('retencion.eventos_cap', '50000',
'Tope de filas en public.eventos. Al alcanzarlo, internal.log_evento rechaza nuevos inserts con excepción (freno anti-loop, no FIFO).')
ON CONFLICT (clave) DO NOTHING;
-- ─── Pagos: ventanas operativas ─────────────────────────────────────────────
-- Claves ya consumidas por funciones existentes (fc_editar_pago, fc_anular_pago,
-- fc_reservar_turno) que hasta ahora venían cayendo al default por ausencia de
-- fila. Sembradas acá para que queden explícitas y editables sin redeploy.
INSERT INTO internal.app_config (clave, valor, descripcion) VALUES
('pagos.ventana_edicion_minutos', '30',
'Minutos desde el registro durante los cuales un pago admite edición o anulación sin disparar evento. Leída por fc_editar_pago y fc_anular_pago.'),
('pagos.umbral_morosidad_meses', '2',
'Cantidad de meses impagos a partir de los cuales se bloquea al cliente para reservar turnos. Leída por fc_reservar_turno.')
ON CONFLICT (clave) DO NOTHING;
-- ─── Retención: huérfanas resueltas (ventana de seguridad) ──────────────────
-- Unidad: días (no meses). Consumidor: internal.limpiar_huerfanas_resueltas.
-- Es el piso de gracia para deshacer un cambio de estado por error: una
-- huérfana en estado terminal (reubicado/resuelta) recién se vuelve elegible
-- para purgar cuando pasaron al menos N días desde su `resuelto_en`. La purga
-- real corre en la cadencia del cron mensual; en la práctica las terminales
-- viven entre N+1 y N+31 días.
INSERT INTO internal.app_config (clave, valor, descripcion) VALUES
('retencion.huerfanas_resueltas_dias', '14',
'Días de gracia mínimos que una reserva huérfana en estado terminal (reubicado/resuelta) debe tener desde su cambio de estado para ser elegible para purga.')
ON CONFLICT (clave) DO NOTHING;