Los errores que más sangran un gimnasio no son los grandes — son los chiquitos repetidos. Un cero de más al cobrar una cuota. Una venta del shop a un precio simbólico que en realidad era un typo. Una "cortesía" que ensucia el reporte de caja del mes. Tres errores que cualquier cajero comete tarde un domingo y que recién aparecen cuando el dueño abre el reporte del mes y no le cierra.

Esta semana sumamos a GymFlow tres validaciones nuevas que atrapan estos casos antes de que impacten en caja, stock o reportes. Ninguna te frena de hacer la operación si realmente la querés hacer — pero te muestran un confirm explícito con detalle de qué estás por aceptar. Porque la diferencia entre "lo aceptaste" y "no te diste cuenta" es justo el dato que después no podés reconstruir.

1. Sobrepago al asignar membresía

El caso clásico: un cajero asigna el plan mensual de $35.000, tipea el monto pagado y suelta un cero de más sin querer — 350000 en vez de 35000. La membresía queda registrada como sobrepagada en $315.000, el reporte de ingresos del día sale completamente inflado y al cierre del turno el efectivo real no cierra contra lo registrado.

Ahora, al asignar o editar una membresía, GymFlow chequea:

Cada rechazo explica qué pasó, no es un genérico "datos inválidos". El cajero ve "el rango (200 días) excede la duración del plan (30 días)" y sabe exactamente dónde mirar.

2. Venta del shop por debajo del costo

El shop también tiene su typo clásico — una bebida con costo $1.400 que se vende a $1 porque alguien le puso un punto de más al cargar el precio del producto. La venta procesa, el stock baja, la caja registra $1 de ingreso... y la rentabilidad del producto cae a -99% sin que nadie se entere hasta que el reporte mensual muestre profit negativo.

Antes de procesar cualquier venta del shop, GymFlow estima el costo FIFO de los productos del carrito (toma el lote más antiguo disponible) y compara contra el precio de venta. Si cualquier línea está por debajo del costo, en lugar de procesar muestra:

⚠️ ESTÁS VENDIENDO POR DEBAJO DEL COSTO

• 1× Agua 500ml: precio $1 vs costo $1.400 (pérdida $1.399/u)

Total venta: $1
Costo de los productos: $1.400
Pérdida estimada: -$1.399

Esto suele indicar un typo en el precio del producto. Si estás haciendo una promo o liquidación, confirmá. Si no, cancelá y revisá el precio del producto.

El cajero ve el detalle exacto, no una alerta vaga. Si era un error puede cancelar y arreglar el precio del producto en un click. Si era una promo real (liquidar stock viejo, cortesía a un cliente VIP, lo que sea), confirma y la venta procesa — pero queda registrada como shop.sell_at_loss en la auditoría, separada de las ventas normales para que el dueño después pueda filtrarlas en el reporte.

El protocolo es de defensa en profundidad: el chequeo se hace en el frontend (con modal claro) y también en el backend. Aunque alguien manipulara el JS para evitar el modal, el servidor responde con HTTP 422 pidiendo el flag confirm_loss — sin ese flag explícito no procesa.

3. Cortesía / regalo / ajuste de stock en $0

El tercer caso: un cajero le regala una bebida a un alumno habitual ("tomate algo, va de la casa") y para registrar la salida del stock procesa una venta con total $0. Hasta ahora el sistema no preguntaba nada — procesaba la venta, descontaba el stock y insertaba un movimiento de caja con monto $0. La caja del turno se llenaba de movimientos vacíos que no aportaban nada al arqueo pero ensuciaban el conteo de operaciones del día.

El nuevo comportamiento:

AFIP, por su parte, no permite emitir facturas por $0 — y eso ya estaba bien manejado: el flow de auto-emisión rechaza silenciosamente, no genera comprobante inválido. Lo que faltaba era no contaminar la caja con movimientos vacíos.

Por qué esto importa más de lo que parece

Las tres validaciones tienen el mismo principio: no frenan al operador, pero le obligan a confirmar. Eso convierte un error silencioso en una decisión consciente. Si el cajero se equivoca, lo ve y arregla en el momento. Si lo hace a propósito (promo real, cortesía intencional), el sistema lo registra como tal y el dueño después tiene cómo filtrarlo en reportería.

El costo de cada uno de estos errores no es enorme tomado de a uno — pero tomados a lo largo de un mes en un gym con varios cajeros y cientos de operaciones, se acumulan. El "el reporte no me cierra y no entiendo por qué" suele venir de acá: un par de typos que nadie atrapó a tiempo, una cortesía mal registrada, un ingreso fantasma de $0 que infla el conteo del turno.

La diferencia entre "lo aceptaste" y "no te diste cuenta" es justo el dato que después no podés reconstruir. Estas validaciones convierten lo segundo en lo primero.

Auditoría discrimina cada caso

En el log de auditoría — accesible desde Configurador → Auditoría — cada operación queda con una acción específica:

El dueño puede filtrar la auditoría por estas acciones para entender exactamente cuántas cortesías se dieron en el mes, cuántas ventas a pérdida (y por qué), o si hubo intentos de cargar membresías con sobrepago. El historial no se pierde — solo se separa del flujo normal para no distorsionar las métricas operativas.

Lo que sigue

Estas validaciones son la primera capa de un trabajo más grande de "guardarrieles" en operaciones de caja y stock. Lo que viene en las próximas semanas, alineado con el feedback que vamos recibiendo:

La filosofía de fondo no cambia: el sistema no decide por el operador, pero le da contexto suficiente para tomar la decisión correcta. Si te equivocás, lo ves al toque. Si fue intencional, queda registrado como tal. Cero errores silenciosos que el dueño descubre tres semanas después en un reporte que no cierra.

Caja prolija, reportes que cierran

Validaciones automáticas, auditoría granular y reportes financieros consolidados — todo integrado en GymFlow. Probalo 30 días gratis, sin tarjeta de crédito.

Probar gratis 30 días →

Artículos relacionados