Saltar al contenido

Protección al consumidor

El ajuste manual de gerente en ClubWare nunca le dice al socio por qué se le cobró

Por Eduardo Gallegos · Publicado el 22 de septiembre de 2026

Movimiento de cuenta corriente de un socio en ClubWare con un ajuste de gerente sin su justificación a la vista.

Ya documentamos que en ClubWare una membresía vencida puede seguir cargando a la cuenta del socio sin avisarle (clubware-membresia-vencida-sigue-cargando-a-cuenta). Este hallazgo es distinto: no es sobre cuándo se cobra, sino sobre por qué. ClubWare deja que un gerente cargue o abone dinero a la cuenta de un socio por fuera del flujo normal de consumo -algo previsto y necesario para condonar una deuda o corregir un error-, y exige que ese gerente escriba un motivo real, de al menos 10 caracteres, antes de dejarlo hacerlo. Verificamos en el código qué pasa con ese motivo después: llega completo hasta el navegador del propio socio afectado, y la pantalla que él ve lo descarta.

La ley no prohíbe el ajuste -- exige informar el cargo al consumidor

El artículo 7 de la Ley Federal de Protección al Consumidor (LFPC, texto vigente, última reforma publicada en el Diario Oficial de la Federación el 12 de diciembre de 2025) es la cláusula que obliga a todo proveedor a informar sobre los cargos aplicados al consumidor, textualmente:

"Todo proveedor está obligado a informar y a respetar los precios, tarifas, garantías, cantidades, calidades, medidas, intereses, cargos, términos, restricciones, plazos, fechas, modalidades, reservaciones y demás condiciones aplicables en la comercialización de bienes, productos o servicios, sobre todos aquellos que se hubiera ofrecido, obligado o convenido con el consumidor para la entrega del bien o prestación del servicio, y bajo ninguna circunstancia serán negados estos bienes, productos o servicios a persona alguna, así como la información de los mismos."

Un socio de un club deportivo con cuenta corriente es, en los términos de la ley, un consumidor al que se le aplican cargos periódicos. El artículo 1, fracción III, refuerza lo mismo desde el lado de los principios básicos de la relación de consumo: entre ellos está "la información adecuada y clara sobre los diferentes productos y servicios [...] así como sobre los riesgos que representen". La obligación no es que un gerente nunca pueda ajustar una cuenta a mano -eso es una herramienta legítima para corregir errores o condonar una deuda puntual-; la obligación es que el socio se entere de por qué se le cargó o abonó ese dinero, no sólo de que se le cargó.

Agenda una demo gratis

La sanción: hasta $4,274,960.73 por incumplir esa condición

El artículo 128 de la LFPC fija la multa para quien infrinja, entre otros, el propio artículo 7:

"Las infracciones a lo dispuesto por los artículos 7 [...] serán sancionadas con multa de $1,093.02 a $4,274,960.73."

Montos vigentes por la actualización de multas de PROFECO, publicada en el Diario Oficial de la Federación el 23 de diciembre de 2025. El monto concreto dentro del rango lo determina la autoridad -normalmente a partir de una queja del consumidor ante PROFECO- y no es automático por cada ajuste: es el techo de exposición si la autoridad decide sancionar el patrón.

ElementoQué dice la norma
Información adecuada y clara sobre el servicioArt. 1, fr. III, LFPC
Obligación de informar los cargos aplicados al consumidorArt. 7, LFPC
Infracción al art. 7Multa de $1,093.02 a $4,274,960.73 (art. 128, LFPC; PROFECO, montos actualizados DOF 23-12-2025)

Verificado en el código: el motivo existe, viaja completo, y la pantalla del socio lo descarta

Confirmamos el hallazgo directamente en el código de ClubWare (repo medware-cafeteria, servicio core). El método ajuste() deja a un gerente cargar o abonar dinero a la cuenta de un socio "de forma discrecional" -así lo describe el propio comentario del código, "Excepción explícita del gerente (positiva o negativa) -- SIEMPRE con PIN + motivo ≥10 chars"- pero exige verificar su PIN antes de ejecutarlo (services/core/src/cuenta-corriente/cuenta-corriente.service.ts:161-184). El esquema de validación obliga a que ese motivo sea sustantivo, no un relleno: motivo: z.string().trim().min(10).max(500) (packages/shared-schemas/src/club.ts:72), campo obligatorio, no opcional.

El movimiento que queda en la base de datos guarda ese motivo en una columna aparte de la etiqueta genérica que ve el sistema: el concepto insertado es siempre el texto fijo 'Ajuste manual de gerente', mientras que la justificación real -la que el gerente estuvo obligado a escribir- se guarda en motivo_ajuste (cuenta-corriente.service.ts:178,180). Y ese dato no se queda enterrado: la propia función que traduce el movimiento para la API lo incluye explícitamente, motivoAjuste: f.motivo_ajuste (cuenta-corriente.service.ts:268).

Verificamos que el dato llega completo hasta el navegador del socio. El endpoint que el propio socio consulta desde su portal, /core/cuentas/me/movimientos, devuelve el mismo tipo completo MovimientoCuenta[] que usa la pantalla del staff -incluido motivoAjuste (apps/web-admin/src/lib/api.ts:109-110; tipo declarado en packages/shared-types/src/club.ts:83-96). La pantalla interna, la que ve el staff en la ficha de cada socio, sí lo muestra: si mv.motivoAjuste existe, lo imprime debajo del concepto en una línea aparte, junto con un ícono de candado cuando el movimiento fue autorizado por un gerente (apps/web-admin/src/app/(app)/socios/[id]/page.tsx:177-190). Pero la pantalla "Mis movimientos" del portal del socio -la única que él puede ver de su propia cuenta- sólo tiene cuatro columnas: fecha, tipo, concepto y monto. Nunca lee m.motivoAjuste ni m.autorizadoPorUsuarioId en ningún punto del archivo (apps/web-admin/src/app/portal/cuenta/page.tsx:69-88). No es una restricción del backend que le esconde el dato al socio por seguridad: es la misma respuesta completa que ve el staff, con el motivo adentro, y la pantalla del socio simplemente no lo pinta.

Agenda una demo gratis

Qué significa en la práctica, y qué falta en el producto

Con el diseño actual, un socio que revisa su estado de cuenta en el portal y encuentra un renglón "Ajuste manual de gerente" por $350 -o el que sea- no tiene forma, dentro del propio producto, de saber si fue una condonación por una queja que hizo, una corrección de un error de caja, o un cargo por un consumo que alguien capturó mal. El gerente sí estuvo obligado a explicarlo -el esquema no deja pasar un motivo de menos de 10 caracteres-, y ese texto existe en la base de datos y viaja hasta el navegador del socio en la misma respuesta que arma el resto de la pantalla. Lo que falta no es una funcionalidad nueva: es que portal/cuenta/page.tsx pinte m.motivoAjuste igual que ya lo hace la pantalla del staff, con el mismo condicional de una sola línea. Puedes ver ese recorrido completo, del ajuste al estado de cuenta, en del ajuste al estado de cuenta: el flujo en ClubWare, o estimar la exposición con tus propios números en la calculadora de exposición por ajustes manuales sin motivo visible.

Preguntas frecuentes

¿ClubWare permite un ajuste de cuenta sin justificación?
No a nivel de base de datos: el esquema de validación exige un motivo de al menos 10 caracteres y rechaza la operación si el gerente lo deja vacío o demasiado corto. El problema no es la falta de motivo, es que el socio afectado nunca lo ve.

¿El socio se entera del motivo del ajuste a través del portal?
No. La pantalla "Mis movimientos" de su portal muestra fecha, tipo, concepto y monto, pero nunca el campo motivoAjuste -aunque ese dato llega completo en la misma respuesta que arma el resto de la pantalla.

¿El staff del club sí ve el motivo?
Sí. La ficha del socio que usa el staff imprime el motivo debajo del concepto cuando existe, junto con un ícono que indica que el movimiento fue autorizado por un gerente.

¿La Ley Federal de Protección al Consumidor obliga a mostrar el motivo exacto de cada cargo?
El artículo 7 exige informar los cargos aplicados al consumidor; no fija el formato exacto de esa información. Que el sistema calcule y guarde un motivo obligatorio pero no lo muestre al socio afectado es, como mínimo, una brecha entre lo que la ley exige informar y lo que el producto hoy comunica.

Fuentes consultadas: Ley Federal de Protección al Consumidor, texto vigente publicado por la Cámara de Diputados del H. Congreso de la Unión, última reforma publicada en el Diario Oficial de la Federación el 12 de diciembre de 2025 (artículos 1, 7 y 128). Actualización de montos de operaciones y multas de PROFECO, Diario Oficial de la Federación, 23 de diciembre de 2025. Este artículo es orientativo y no sustituye una revisión de tu caso por tu abogado o asesor legal.

Ve qué pasa hoy cuando un gerente ajusta la cuenta de un socio

Te mostramos en vivo el flujo de ajuste manual con PIN de gerente, y el punto exacto donde el motivo deja de llegar a la pantalla del socio.

Agenda una demo gratis
Agendar 30 min
Contacta a un especialista
Ventas y Proyectos (abre en una ventana nueva) Soporte Técnico (abre en una ventana nueva)