Un cliente nos escribió esta semana con una queja simple: "no están los socios que se anotaron en el día — no dice los nombres en la caja". Estaba mirando el cierre del día en su panel de Caja, esperando ver una lista clara de qué alumnos nuevos había entrado, y solo veía movimientos: "Pago membresía — Hernando Silvana, $35.000", "Pago membresía — Esquenazi Mateo, $33.000", y así doce filas. Plata sí, contexto no. La pregunta operativa que él tenía no era ¿cuánto entró? sino ¿quién es nuevo y quién vino a renovar?. Y la caja, por buena que esté, no responde esa pregunta.
Lo que ese mensaje destapó es una distinción que la mayoría de los reportes de gimnasio mezcla por defecto, y que mezclada esconde señales importantes del negocio. Esta semana shipeamos dos paneles separados — Altas del día y Renovaciones del día — y vale la pena explicar por qué los hicimos como dos cosas distintas en lugar de un único reporte de "actividad del día".
La caja te dice cuánto entró, no quién entró
Una caja de gym cumple una función contable: registrar cada movimiento de plata, atado a un cajero, un medio de pago y un turno. Es la fuente de verdad para el arqueo. Pero esa función contable, llevada al extremo, hace que el reporte diario sea una lista de movimientos, no una lista de actividad.
Tres cosas se pierden en esa traducción:
- Los altas que aún no pagaron no aparecen en caja, pero existen como contacto comercial. El alumno se anotó hoy, eligió plan, dijo "te pago la semana que viene". Si la única forma de "verlos" es navegando el padrón filtrado por
created_at = hoy, ese contacto se pierde mentalmente al cerrar el día. - Las renovaciones que sí pagaron aparecen mezcladas con las altas que pagaron, sin distinción. Para el cierre de plata da igual; para entender la salud del negocio, no. Renovar es retener; entrar nuevo es captar. Son dos motores distintos.
- Las cortesías y staff con plan $0 aparecen como alumnos en el padrón pero no generan movimiento de caja, así que están y no están al mismo tiempo. Mirar la caja te hace olvidarlos.
El cliente nuestro no estaba pidiendo "más datos". Estaba pidiendo menos ruido contable y más contexto operativo. La caja resuelve un problema (el del contador, el del arqueo del cajero) y deja otro intacto (el del dueño que cierra el día y se pregunta cómo le fue).
Alta y renovación: dos señales del negocio, no una
Vale la pena detenerse en por qué separar altas de renovaciones cambia lo que ves. Mirá la diferencia con dos números reales:
Un gimnasio cierra el viernes con 15 cobros del día por $500.000 en total. Linda jornada. Pero ese mismo gimnasio en realidad tuvo 2 altas y 13 renovaciones. La señal real es: "el padrón existente está pagando bien, pero estamos captando casi nada". Si el viernes anterior fue 10 altas y 5 renovaciones con la misma plata total, la lectura es totalmente distinta — captamos mucho pero el padrón viejo está fugándose.
El total de caja es idéntico. Las decisiones que tenés que tomar son opuestas:
- Pocas altas + muchas renovaciones: tu producto se sostiene solo, pero tu adquisición está fría. Acción: revisar campañas, redes, recomendaciones, promo de "trae un amigo".
- Muchas altas + pocas renovaciones: estás captando bien pero el padrón viejo se va. Acción: revisar retención, calidad de las clases, motivos de baja, contacto proactivo con vencimientos.
- Pocas de las dos: alarma. Algo en el funnel está roto.
- Muchas de las dos: tu negocio está sano. Documentar qué estás haciendo bien.
Estos cuatro cuadrantes no se ven en un total de caja. Recién aparecen cuando separás los dos números.
Cómo quedó implementado en GymFlow
En el menú de CRM ahora hay dos entradas independientes:
Altas del día
Lista los alumnos cuyo created_at cae en el rango de fechas que elijas. Default: hoy. Cada fila muestra nombre, DNI, teléfono, plan asignado, monto a pagar, cobrado, pendiente, cajero, hora del alta y estado de pago. Aparecen también los altas que no pagaron todavía — porque siguen siendo altas, aunque no hayan tocado caja.
Stats arriba: total de altas, cuántas tienen plan asignado, cuánto se cobró en caja por esas altas, y cuánto saldo queda pendiente. Filtros rápidos por rango (Hoy / Ayer / 7 días / 30 días / personalizado) y por sede en gimnasios multi-sede.
Renovaciones del día
Pivota sobre member_memberships: lista las membresías creadas en el rango cuyo alumno ya tenía membresías previas. Es decir, no son alumnos nuevos — vinieron a sumar otra cuota. Mismas columnas que altas más una clave: "Vence" con el nuevo vencimiento y, debajo, el vencimiento previo, para que veas de qué fecha venía la membresía cuando se renovó (¿se renovó cinco días antes? ¿el día siguiente del vencimiento? ¿con quince días de mora?).
Stats: total de renovaciones, cuántas se pagaron en el momento, cuánto se cobró, cuánto queda pendiente.
Lo que el panel de Renovaciones te muestra y la caja no
El panel de renovaciones tiene un detalle que parece menor y es central: la columna "Vence" con el dato del vencimiento previo. Eso te permite leer, fila por fila, cómo está renovando cada socio:
- Renovación antes del vencimiento: socio comprometido, viene previniendo. Buena señal.
- Renovación el mismo día del vencimiento: timing operativo. Probablemente porque pasa por el gym y ahí mismo le cobran. Aceptable.
- Renovación con días de mora: hubo fricción. El alumno se atrasó, alguien lo contactó, finalmente renovó. Vale entender por qué — ¿faltó push de vencimiento? ¿el plan le quedó caro? ¿hubo lío personal?
Tres patrones que la caja no separa, porque para la caja todos son "+$33.000 — Pago membresía". El reporte de renovaciones los muestra alineados, y al cabo de una semana tenés idea de cómo se está comportando tu padrón sin tener que entrar a cada ficha individual.
El alta sin pago no es un problema de caja, es un punto comercial
El otro caso que el panel de Altas resuelve es el alumno nuevo que no pagó todavía. Esa persona no aparece en caja porque la caja registra plata, no contactos. Pero comercialmente es un caso especial — alguien dijo "sí, me anoto", eligió plan, dejó datos, y todavía no efectivizó. Si nadie hace seguimiento, en una semana ese alumno se "olvidó" o se metió en otro gym.
El panel de Altas los lista con estado "Pendiente" y muestra el saldo. El cajero o el dueño abre el panel a la noche, ve los dos o tres altas pendientes del día, y decide: ¿les escribo por WhatsApp? ¿espero hasta mañana? ¿les ofrezco un descuento si pagan en 24 hs? Esa decisión simplemente no existía antes, porque esos alumnos eran invisibles fuera del padrón general.
Exportar a Excel: porque el dueño igual quiere su Excel
Ambos paneles tienen botón "Exportar CSV" (con BOM UTF-8 para que Excel respete los acentos, y con punto y coma de separador para que las columnas se abran solas en regional español). Reservado a admin — el staff/cajero puede consultar pero no puede llevarse el padrón a otro sistema.
El CSV de Renovaciones agrega una columna que el de Altas no tiene: "Vencimiento previo". Para que cuando el dueño abre la planilla en Excel y arma una pivot, pueda ver — sin tocar el sistema — qué proporción de renovaciones llegan antes del vencimiento, cuántas con mora, y la mora promedio. Métricas que valen oro y que casi ningún gym mide hoy porque hace falta cruzar dos planillas a mano.
Por qué dos paneles y no uno con tabs
La discusión interna fue exactamente esa: "hagamos un solo panel con dos pestañas". No lo hicimos por una razón de uso real: las personas que entran a "ver los altas" rara vez son las mismas que entran a "ver las renovaciones". Las altas las quiere ver el dueño y el comercial — para entender captación. Las renovaciones las quiere ver el dueño y el cajero — para detectar mora y rezagados.
Dos entradas distintas en el sidebar significan dos accesos rápidos, dos URL bookmarkables, dos shortcuts. Si fuera un solo panel con tabs, vos como cajero tendrías que entrar y hacer un click más todos los días para llegar a tu vista. Pequeña fricción, repetida diaria, suma. Mejor dos puertas.
El total de caja te dice cuánto entró. Saber cuánto fue alta y cuánto fue renovación te dice cómo te fue.
Lo que sigue
Estos dos paneles son la versión 1 de algo más amplio. El roadmap natural:
- Comparativa semana vs semana: "esta semana 8 altas vs 12 la anterior — bajó 33%". Tendencia automática para detectar caídas antes de que sean estructurales.
- Alerta proactiva por baja captación: si las altas de los últimos 7 días caen más del X% respecto del mismo período del mes anterior, mandar push al dueño para que sepa antes que el contador se lo diga.
- Reporte mensual por email: el primero de cada mes, resumen automático con altas vs renovaciones del mes anterior, ratio retención/captación, top planes nuevos, mora media en renovaciones.
- Funnel de altas: desde el primer contacto (formulario web, WhatsApp, walk-in) hasta el cobro efectivizado, con tasa de conversión por etapa.
Todo eso se construye sobre la base de tener altas y renovaciones bien separadas en la fuente de datos. Que parece un detalle de UX y termina siendo el cimiento del análisis comercial del gym.
Reportes que te dicen cómo fue, no solo cuánto entró
Altas, renovaciones, deudores, retención, asistencia — métricas que separan las decisiones operativas de las comerciales. Probá GymFlow 30 días gratis, sin tarjeta de crédito.
Probar gratis 30 días →Artículos relacionados
- Alta de alumno en un gimnasio: el proceso completo, paso a paso
- Reportes financieros del gimnasio: KPIs, proyección y churn
- Campaña de retención en 10 minutos: vencimientos, chat y Excel
- Gestionar deudores del gimnasio: el reporte que se cobra solo
- Tres chequeos que cuidan el margen del gym: sobrepago, venta a pérdida y cortesía $0