Kiosco — Sistema de Control de Consumo Escolar
Gestiona consumos, pagos y deudas de estudiantes en kioscos escolares con este sistema web SSR rápido y eficiente en Go.
Resumen
Kiosco permite llevar el control semanal de consumos por estudiante, registrar pagos, calcular deudas en tiempo real y administrar días no laborables. Es un sistema usado por kioscos escolares que necesitan rapidez, estabilidad y cálculos precisos sin depender de frameworks o frontends complejos.
Problema
Los kioscos escolares suelen gestionar consumos y pagos en cuadernos o Excel, lo que genera: Cálculos manuales propensos a errores, Falta de visibilidad semanal o histórica, Procesos lentos durante el horario de recreo, Dificultad para gestionar días no laborables, Problemas para calcular deudas de semanas anteriores.
Solución
Kiosco automatiza todo el flujo:
- Calcula deudas semanal/anual automáticamente.
- Registra en segundos consumos o pagos.
- Maneja filtros por grado/alumno/fecha.
- Optimiza cálculos de múltiples estudiantes mediante batch SQL.
- UI simple diseñada estrictamente para velocidad de venta.
- Implementación robusta de errores y logging.
Arquitectura
Arquitectura basada en separación por capas, siguiendo un estilo MVC-like, con SSR usando plantillas HTML compiladas.
{
"cmd/kiosco/main.go": "entrypoint",
"internal": {
"config": "Variables de entorno",
"db": "Pool PostgreSQL",
"models": "Modelos Go",
"repositories": "Queries SQL optimizadas",
"services": "Lógica de negocio (cálculo de deuda)",
"controllers": "Manejo de rutas HTTP + templates",
"router": "Enrutamiento HTTP",
"middleware": "Logger y recuperación de panics",
"views": "Plantillas .tmpl (SSR)",
"utils": "Funciones auxiliares"
}
} Decisiones de diseño
Rendimiento
Base de datos
- 10+ índices optimizados
- Índices compuestos: IdEstudiante + Fecha
- Índices parciales: Estudiantes(EstaActivo=true)
- Batch queries para semanas completas
- Pool de conexiones reducido para evitar saturación
Backend
- Sin frameworks → overhead mínimo
- Templates compilados una vez al inicio
- Iteraciones con Pre-alloc en slices/maps
- Prepared statements persistentes
Rutas de la API
| Método | Ruta |
|---|---|
| GET | / |
| POST | /registrar-consumo |
| POST | /registrar-pago |
| GET | /editar-consumos |
| POST | /guardar-consumos-dia |
| GET | /editar-pagos |
| POST | /eliminar-pago |
Lecciones aprendidas
El SQL puro con índices adecuados supera ampliamente cualquier ORM.
El SSR con Go es extremadamente rápido y estable.
Batch queries reducen drásticamente el tiempo de cálculo semanal.
La simplicidad del stack facilita debugging y despliegue.