Este proyecto implementa un motor de cálculo de precios dinámico que permite a los administradores cambiar las reglas de cobro en tiempo real desde la base de datos sin necesidad de modificar o desplegar código nuevo.
El precio final de una inscripción se determina mediante una jerarquía tridimensional de datos:
- Precio Base: Definido individualmente por cada Diócesis/Jurisdicción.
- Descuento por Rol: Aplicado según el perfil del usuario (ej. Sacerdote, Seminarista, Laico).
- Ajuste por Hospedaje: Cargo adicional opcional calculado según la política vigente.
El sistema utiliza la siguiente operación para determinar el total a pagar:
A través de la tabla configuracion_inscripcion, el administrador puede alternar entre las siguientes estrategias de cobro:
- Modo Porcentaje (
porcentaje): Aplica una reducción relativa basada en la columnadescuento_porcentajede la tabla de roles. - Modo Fijo (
fijo): Resta un monto exacto en pesos definido en la columnadescuento_fijo. - Modo Ninguno (
ninguno): Ignora los descuentos y aplica la tarifa plena de la Diócesis.
- Costo General: Si
usar_hospedaje_diocesisesfalse, se suma el valor devalor_hospedaje_generala todos los que marquen "SÍ". - Costo por Jurisdicción: Si
usar_hospedaje_diocesisestrue, el sistema busca el valor enprecio_hospedaje_especificodentro de la tabla de la Diócesis seleccionada (útil para sedes con diferentes costos hoteleros).
Para garantizar que el proceso sea transparente y a prueba de manipulaciones, el sistema opera en dos capas:
- Cálculo en Tiempo Real (Frontend): Utiliza
useMemoy observadores (watch) en React para mostrar al usuario el desglose de su tarifa (Base, Descuento y Hospedaje) instantáneamente mientras llena el formulario. - Blindaje en Servidor (SQL Trigger): Un disparador en PostgreSQL (
BEFORE INSERT) intercepta la solicitud, consulta las tablas maestras y sobrescribe el campoprecio_pactado. Esto evita que un usuario altere el precio modificando el código del lado del cliente.
El sistema cuenta con una cláusula de "Piso Cero". Si los descuentos aplicados son superiores al valor de la inscripción, el sistema ajusta automáticamente el total a $0, permitiendo inscripciones gratuitas pero nunca saldos negativos.
| Tabla | Columnas Clave |
|---|---|
diocesis |
precio, precio_hospedaje_especifico |
tipos_persona |
descuento_porcentaje, descuento_fijo |
configuracion_inscripcion |
metodo_descuento, usar_hospedaje_diocesis, valor_hospedaje_general |
inscripciones |
precio_pactado (Calculado por Trigger) |
El sistema utiliza Supabase Auth para gestionar el acceso al panel administrativo. La seguridad se basa en tres pilares:
- Persistencia de Sesión: Manejada mediante cookies seguras para permitir que el administrador permanezca conectado mientras gestiona los registros.
- Middleware de Protección: Un filtro de seguridad a nivel de servidor que intercepta las rutas
/admin/*. Si no existe una sesión activa, el usuario es redirigido automáticamente al/login. - Seguridad a nivel de Fila (RLS): Las tablas críticas (
configuracion_inscripcion,diocesis) están protegidas en la base de datos. Solo los usuarios autenticados pueden realizar operacionesUPDATEoDELETE.
- Público: Acceso exclusivo al formulario de inscripción.
- Privado: Acceso al Dashboard, lista de inscritos y configuración de precios mediante credenciales de administrador.