Agrego carpeta del source sql de la Base de Datos
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user