¡Seguimos avanzando a paso firme en el desarrollo de nuestro motor de gestión SaaS! Durante las últimas semanas, el equipo se ha centrado en tres pilares fundamentales que transforman el proyecto de un motor de backend robusto a una plataforma lista para el despliegue inicial. Estos avances no solo mejoran la experiencia de usuario, sino que también solidifican la arquitectura para garantizar la seguridad, escalabilidad y auditabilidad que nos propusimos desde el inicio.
A continuación, detallamos las tres grandes fases que hemos completado.
1. Fase 1.3: Ficha de Detalle Reactiva con HTMX
La interacción del administrador con el estado de cuenta de un sujeto de facturación (sea un alumno o un copropietario) es una de las tareas más recurrentes. Para hacer este proceso ágil y moderno, hemos implementado una "Ficha de Detalle" que evita las recargas de página completas, ofreciendo una experiencia de usuario fluida y eficiente.
¿Cómo lo logramos?
- Interactividad con HTMX: Utilizamos la biblioteca HTMX para enviar solicitudes al backend y actualizar solo los fragmentos necesarios del DOM. Al registrar un pago, únicamente la tabla de deudas y el saldo total se actualizan, sin que el navegador deba recargar toda la página.
- Diseño limpio con Tailwind CSS: La interfaz fue construida con clases utilitarias de Tailwind CSS, logrando un diseño profesional, agnóstico y semántico. Los colores de los estados (Verde para Pagado, Rojo para Vencido) permiten una rápida identificación visual.
- Feedback al Usuario: Implementamos indicadores de carga (
hx-indicator) que muestran un spinner mientras el motor procesa un pago, informando al usuario que una acción está en progreso.
Ejemplo del botón de pago en nuestro template de Django:
<!-- Formulario de Pago con HTMX -->
<form hx-post="{% url 'facturacion:registrar_pago' sujeto.id %}"
hx-target="#tabla-deudas-container"
hx-swap="innerHTML"
hx-indicator="#pago-loading">
<button type="submit" class="btn-pagar">
<span id="pago-text">Registrar Pago</span>
<!-- Indicador de carga -->
<svg id="pago-loading" class="htmx-indicator animate-spin" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z"></path>
</svg>
</button>
</form>
2. Fase 1.4: Sistema de Seguridad Multi-Tenant (RBAC)
La seguridad y el aislamiento de datos son innegociables en una arquitectura SaaS multi-tenant. Hemos implementado un Control de Acceso Basado en Roles (RBAC) que se integra perfectamente con django-tenants.
Niveles de Acceso Definidos:
- SuperAdmin (Global): Control total sobre el esquema
public, responsable de crear y gestionar los Tenants (los clientes del SaaS). - Admin de Tenant: El administrador principal de una escuela o consorcio. Puede configurar su tenant, crear otros usuarios y acceder a reportes.
- Operador de Caja: Un rol con permisos limitados, enfocado en la operatoria diaria. Solo puede ver estados de cuenta y registrar pagos.
Gracias al middleware de django-tenants, cualquier intento de un usuario de un tenant de acceder a datos de otro es bloqueado a nivel de base de datos, garantizando un aislamiento total.
Adicionalmente, se implementaron decoradores de permisos personalizados (ej. @role_required('admin')) para proteger las vistas y servicios de forma granular. Para una trazabilidad legal completa, se extendió el AbstractAuditModel para registrar el usuario (ID y Rol) que realizó cada cambio, incluyendo una "instantánea" del rol en el momento de la operación.
3. Fase 1.5: Asistente de Importación de Datos Legados
Para facilitar la transición de nuestros primeros clientes, hemos desarrollado un "Asistente de Importación" que permite migrar datos desde archivos Excel/CSV de forma segura y controlada.
Características Clave:
- Motor de Mapeo Agnóstico: El servicio utiliza la biblioteca Pandas para procesar los archivos. Mapea columnas con nombres genéricos (ej. 'DNI_TUTOR', 'SALDO_ADEUDADO') a los modelos abstractos de nuestro sistema, asegurando la flexibilidad.
- Creación de Saldos Iniciales: Al importar, el sistema genera automáticamente una "Cuota de Ajuste" o "Saldo Inicial" para cada sujeto, garantizando que su cuenta corriente en el nuevo sistema refleje con precisión su estado anterior.
- Reporte de Errores Detallado: Si una fila del archivo contiene errores (ej. un CUIT duplicado o un formato de fecha inválido), el proceso no se detiene. En su lugar, se registran los errores y se genera un log para que el usuario pueda corregir solo las entradas problemáticas, mientras se procesan las válidas.
- Trazabilidad y Auditoría: Cada registro creado mediante este proceso queda marcado en nuestro
AbstractAuditModelcomo una "Carga Masiva Inicial", cumpliendo con nuestros estrictos requisitos de auditabilidad y defendibilidad judicial. - Interfaz con HTMX para el progreso: El asistente de importación incorpora una vista simple con HTMX que muestra una barra de progreso o un spinner, manteniendo al usuario informado sobre el estado del procesamiento del archivo.
Conclusión y Próximos Pasos
Con estos avances, GestiónCuotas está más cerca que nunca de su lanzamiento piloto. Hemos sentado las bases de una interfaz de usuario moderna, un sistema de seguridad robusto y una vía de migración eficiente para nuestros futuros clientes e inversores.
El próximo gran paso será el despliegue del Dashboard de Control de Gestión, donde los administradores podrán visualizar métricas de cobrabilidad en tiempo real. ¡El motor está listo y funcionando!
Publicado por el equipo de desarrollo de GestiónCuotas - Mendoza, 2026.
No hay comentarios.:
Publicar un comentario