Módulo de Inscripciones y Pagos
Propósito
Este módulo está diseñado para gestionar el ciclo completo de pagos, reembolsos y notificaciones financieras dentro del sistema, proporcionando una experiencia fluida tanto para los clientes como para la administración.
Funcionalidades Clave
Pagos en Línea
-
Integración con Pasarelas de Pago: Soporte para múltiples pasarelas de pago (ej., PayU, Wompi, Nequi) para procesar transacciones de forma autogestionada por el cliente.
-
Flujo de Checkout: Permite a los usuarios completar pagos directamente desde la plataforma mediante redirección segura a las pasarelas.
-
Confirmación Automática: Actualización del estado de las reservas y servicios una vez que el pago es confirmado por la pasarela a través de webhooks.
Gestión de Reembolsos
-
Procesamiento de Devoluciones: Sistema robusto para gestionar y procesar devoluciones de dinero, siguiendo las políticas de cancelación definidas.
-
Actualización de Estado: Las devoluciones actualizan el estado de la reserva o servicio asociado, reflejando el reembolso realizado.
-
Integración con Pasarelas: Capacidad para iniciar reembolsos directamente desde el sistema a través de las APIs de las pasarelas de pago.
-
Registro de Auditoría: Registro detallado de cada reembolso, incluyendo monto, motivo y usuario que lo procesó.
Notificaciones de Pagos
-
Recordatorios Automáticos: Envío automático de notificaciones (email, push) a los clientes para recordar pagos pendientes o vencidos.
-
Configuración de Recordatorios: Permite configurar la frecuencia y el contenido de los recordatorios.
-
Tracking de Notificaciones: Sistema para evitar el envío de notificaciones duplicadas y asegurar que los mensajes lleguen de manera oportuna.
Reportes Financieros
-
Exportación de Datos: Funcionalidades para exportar reportes financieros a formatos comunes como Excel/CSV y PDF.
-
Visualización Avanzada: Herramientas de visualización con gráficos estadísticos y filtros avanzados para analizar ingresos por día, cancha, tipo de servicio, etc.
-
Tipos de Reportes: Generación de reportes específicos para Reservas, Pagos, Clientes, Canchas y Eventos, facilitando la toma de decisiones financieras.
Comprobantes
-
Generación de Comprobantes: Creación automática y envío por correo electrónico de comprobantes de pago detallados en formato PDF.
-
Captura de transferencia (reservas): Imagen del comprobante bancario o Nequi en
payment.foto(S3/R2 privado); ver Pagos de reserva con comprobante. Distinto del PDF por email.
Aspectos Técnicos
API Endpoints de Pagos
Endpoints de Administración (/admin/payments)
-
GET /admin/payments: Obtiene la lista de pagos con filtros y paginación -
GET /admin/payments/stats: Obtiene estadísticas agregadas de pagos -
GET /admin/payments/:id: Obtiene un pago específico por ID -
GET /admin/payments/transaction/:transaction_id: Obtiene un pago por transaction_id del gateway -
POST /admin/payments: Crea un nuevo pago (útil para pagos manuales o sincronización) -
PATCH /admin/payments/:id: Actualiza un pago existente (permite actualizar campos específicos) -
DELETE /admin/payments/:id: Elimina un pago del sistema
Características importantes:
* El campo status es un boolean: false = pendiente, true = completado
* Los pagos se crean ya vinculados a reserva o inscripción; la validación operativa usa PATCH con status
* Soporte para paginación con limit y offset
* Filtros por search, status, y reservation_id
* Ordenamiento automático: pendientes primero, luego por fecha descendente
Endpoints de Cuenta (/account/payments)
-
GET /account/payments: Obtiene el historial de pagos del usuario autenticado con paginación -
GET /account/payments/:id: Obtiene un pago específico del usuario autenticado -
POST /account/payments: Crea un nuevo pago asociado a una reserva del cliente autenticado
Características:
* Solo devuelve pagos asociados a reservas del usuario autenticado
* Incluye información adicional de la reserva: court_name, checking, checkout
* El campo status es un boolean: false = pendiente, true = completado
Endpoints de Reservas de Cuenta (/account/bookings)
-
GET /account/bookings: Obtiene las reservas del usuario autenticado con información detallada de pagos
Características:
* Solo devuelve reservas del usuario autenticado
* Incluye información agregada de pagos: total_paid, total_amount, is_payment_complete, can_add_payment
* Los pagos dentro de las reservas incluyen formato dual:
* status: String ("pending" o "completed") para compatibilidad con frontend
* statusBoolean: Boolean equivalente (false = pending, true = completed)
Webhooks
-
POST /webhooks/payment: Recibe notificaciones de pagos del gateway de pago
Flujo de webhook:
1. El gateway envía notificación al webhook
2. El sistema busca si existe un pago con ese transaction_id
3. Si no existe, el pago se crea en el contexto del flujo de reserva/inscripción con su reservation_id o enrollment_id
4. Si existe, actualiza el estado según corresponda
Modelo de Datos
Tabla payment:
* id: ID único del pago (integer, PK)
* reservation_id: ID de la reservación asociada (integer, nullable, FK a reservation)
* payment_type_id: ID del tipo de pago (integer, nullable, FK a payment_type)
* amount: Monto del pago (decimal)
* transaction_id: ID de transacción del gateway (string, nullable)
* gateway_response: Respuesta completa del gateway (text, nullable)
* status: Estado del pago (boolean: false = pendiente, true = completado)
* date: Fecha del pago (timestamp, default: CURRENT_TIMESTAMP)
* description: Descripción del pago (string, nullable)
* foto: Referencia interna al comprobante en S3/R2 (string, nullable). Subida con POST/PATCH multipart; descarga con GET …/payment/{paymentId}/foto; quitar comprobante con DELETE …/payment/{paymentId}/foto; al eliminar el pago (DELETE …/payment/{paymentId}) también se borra del bucket si existe
Pagos de reserva con comprobante
Almacenamiento privado S3-compatible (AWS S3 o Cloudflare R2), servicio PaymentReceiptStorage (functions/services/payment-receipt-storage.js). El panel permite Subir, Ver y Eliminar comprobante en /booking/payment/:id.
-
POST /admin/booking/{bookingId}/payment: JSON (foto = null) o multipart confoto(JPEG/PNG/WebP, máx. 5 MB) -
PATCH /admin/booking/{bookingId}/payment/{paymentId}: JSON o multipart confoto(añadir o reemplazar) -
GET /admin/booking/{bookingId}/payment/{paymentId}/foto: descarga autorizada (proxy; Bearer + CSRF) -
DELETE /admin/booking/{bookingId}/payment/{paymentId}: elimina el pago; si tiene comprobante, tambiénDeleteObjecten bucket -
DELETE /admin/booking/{bookingId}/payment/{paymentId}/foto:DeleteObjecten bucket +payment.foto = null -
Migración:
089_payment_foto.sql -
Variables:
AWS_BUCKET,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY, opcionalAWS_ENDPOINT,AWS_USE_PATH_STYLE_ENDPOINT,AWS_PUBLIC_BASE_URL
Diagramas: Subida y Visualización. Detalle HTTP: Comprobantes de pago.
Seguridad
-
Autenticación: Todos los endpoints requieren autenticación mediante OAuth2 local IdP (Bearer token)
-
Autorización: Los endpoints de administración requieren permisos de administrador
-
Validación: Se valida que las reservaciones existan antes de asociar pagos
-
Sanitización: Los datos de entrada se validan y sanitizan antes de insertar en la base de datos
-
Cumplimiento: Cumplimiento con estándares de seguridad PCI para el manejo de transacciones financieras
Módulo de tickets (panel)
Ventas de paquetes de boletos y tirillas desde el panel (/tickets), API /admin/tickets/*.
Flujo operativo
-
Catálogo de programas y paquetes (
GET /admin/tickets/programs). -
Cotización (
POST /admin/tickets/quote) conpackage_idyticket_count. -
Emisión (
POST /admin/tickets/sales): comprador, teléfonos, pago. -
Historial y detalle (
GET /admin/tickets/sales,GET /admin/tickets/sales/{id}).
Tarifas de paquetes: panel Tarifas → Tarifas de Paquetes (PUT /admin/tickets/packages).
Relación con eventos PMV
Los participantes de un evento pueden vincularse por client_id o ticket_id (boleto de tirilla). Ver Módulo de Eventos y Referencia de API — Tickets.