Kit de plan · gimnasio y estudio · código abierto

El plan completo para que el alumno vuelva mañana

Especificación, 99 pruebas de aceptación, salvaguardas y prompts para que un agente construya, en tu entorno, la atención de un gimnasio o estudio pequeño: planes y matrícula, clases con cupos y lista de espera, check-in, rutina de entrenamiento, ejercicios animados y el equipo en Telegram. El sistema todavía no está implementado: este repositorio es el plan, y tú ejecutas la implementación.

Banner de Atende Academia: planes y matrícula, clases con cupos y lista de espera, check-in, rutina de entrenamiento, ejercicios animados y equipo en Telegram
Qué es

Un kit para pedirle al agente: del contrato a las 99 pruebas en verde

Aquí no hay una aplicación lista. Hay el contrato de lo que la aplicación debe hacer, la batería de pruebas que lo demuestra y las salvaguardas que impiden que el agente haga trampa. Quien construye es Claude Code o Codex, corriendo en tu máquina, con tu suscripción. Su hermano Atende Fisioterapia sigue el mismo molde, y atende-clinica, que vino antes, se hizo exactamente así y cerró 93 de 93 pruebas.

Planes con estado de pago manual, clases grupales con cupos y lista de espera, check-in y reactivación con consentimiento, rutina de entrenamiento, evaluación física como dato sensible y equipo en Telegram

🏋️ El sistema que sale del plan

Alumnos y planes, clases grupales con reserva, check-in y la rutina de entrenamiento del profesor. En el centro está la clase con cupos: reserva con límite, lista de espera con oferta automática y falta automática. Python 3 solo con la biblioteca estándar y SQLite, un gimnasio por instalación.

📦 El kit

Especificación de 23 secciones (0 a 22), 99 pruebas de caja negra, 20 decisiones ya propuestas, mapa hacia Raio-X, prompts para /goal y para el loop headless, y las salvaguardas que congelan el contrato. Un validador adversarial ya revisó todo y encontró 10 problemas, 2 de los cuales habrían frenado a un implementador honesto.

📈 Fuente: Raio-X de Margem

La falta sin aviso, el horario ocioso y el alumno que desaparece son las fugas que ataca el plan. El sistema devuelve seis números del mes al panel de Raio-X de Margem, que es la fuente de las reglas de negocio. Allí no existe un paquete de gimnasio: el kit usa el modelo genérico de servicios con agenda, y cada mapeo es una premisa.

💳 Plan y matrícula, pago manual

Planes mensual, trimestral, anual y clases sueltas, con precio y vigencia. La matrícula es ativa, vencida, trancada o cancelada (activa, vencida, congelada, cancelada). El pago es solo un estado manual (pago o pendente, pagado o pendiente) marcado por el equipo, más el aviso de vencimiento. Ningún Pix, tarjeta ni intermediario de pago en la v1.

📍 Check-in y reactivación

El alumno hace check-in con su código en la recepción o por el chat (cheguei, "llegué"), uno por día. A quien desaparece hace N días le llega un mensaje de reactivación, pero solo si dio su consentimiento: la reactivación es marketing, no un aviso del contrato. "PARAR" bloquea todo lo automático.

🔒 LGPD y evaluación física

Exportar y anonimizar los datos del alumno. El resultado de la evaluación física (peso, estatura, medidas) es un dato sensible: solo lo ve el equipo, nunca por la conversación, y se borra junto con el alumno. La LGPD y el 192 son de Brasil: la LGPD es la ley brasileña de protección de datos y el 192 es el número de la ambulancia en Brasil.

Cómo funciona

De la matrícula al "llegué" de cada día

Este es el flujo del sistema planificado, lo que el agente va a construir. Servidor Python sin dependencias, SQLite en una carpeta de datos y Docker para el VPS. Evolution y Telegram entran solo por variables de entorno; sin ellas, la bandeja de salida es simulada y no sale ninguna llamada de red.

Chat del sitio o WhatsApp (Evolution)→ Plan y matrícula→ Reserva de clase, cupo o espera→ Check-in y falta automática→ Rutina de entrenamiento y ejercicio animado→ Reactivación y números para Raio-X

Alumno

Por el chat o por WhatsApp pregunta por las clases, reserva y cancela, ve meu plano (mi plan) y meu treino (mi entrenamiento), pide explica agachamento (explica la sentadilla), escribe cheguei, resuelve dudas con el FAQ, pide un humano y manda "PARAR" cuando no quiere más mensajes. Una palabra de alerta de salud (dolor fuerte, dolor en el pecho, falta de aire, desmayo, mareo, lesión y otras) se responde con 192 y avisa al profesor. El chat está en portugués en la v1.

Equipo en Telegram

Avisos de reserva y de cancelación, y los comandos /aulas [fecha], /fila, /responder y /encerrar, también como respuesta directa al mensaje del alumno.

Página /equipe

Con token: alumnos, planes y matrículas, grilla, reservas, check-ins, rutinas, evaluaciones, biblioteca de ejercicios, FAQ, registros y la cola humana.

Clases, cupos y espera

La grilla semanal tiene modalidad, profesor, sala y cupos. La reserva respeta el límite de cupos y la anticipación; con 10 pedidos para el último cupo, uno recibe 201 y los otros nueve 409. Cuando alguien cancela, el primero de la lista de espera recibe la oferta automática.

Plazo de cancelación y falta

Cancelar dentro del plazo (por defecto 2 h antes) devuelve el crédito. Pasado el plazo, el cupo se libera y se dispara la espera, pero el crédito suelto no vuelve. Una reserva sin check-in el día de la clase pasa a ser falta automática en la ronda de tareas, y el equipo puede corregirla.

Rutina de entrenamiento

El profesor arma la rutina con ejercicios de la biblioteca (series, repeticiones, carga, descanso). El alumno pide meu treino de hoje (mi entrenamiento de hoy) y recibe el entrenamiento que toca, en secuencia con cada check-in. El bot muestra la rutina del profesor y nunca prescribe.

🎞️ Demostración: ejercicio animado solo con CSS

Cada ejercicio es un SVG con animación solo en CSS, sin script y sin SMIL. Medido en un render real, HyperFrames no tiene adaptador SMIL: el movimiento SMIL salió quieto o desfasado en el MP4, y solo el CSS quedó fiel. Esta es la sentadilla: pies fijos en el suelo, rodillas hacia adelante, cadera hacia atrás.

Sentadilla

Los 12 ejercicios del ejemplo

Sentadilla, flexión de brazos, plancha, remo inclinado, press de banca, peso muerto con bastón, zancada, elevación de pelvis, abdominal, press de hombros, jalón al pecho y salto de tijera (jumping jack).

Cada uno tiene una página pública /exercicios/<id> con el SVG animado, los pasos, los errores comunes y los cuidados. En WhatsApp va un MP4 de 4 s renderizado por HyperFrames, un paso de build local (tools/render-exercicios); sin el MP4 (o sin PUBLIC_URL) va el enlace de la página. Los 12 SVG los dibuja el implementador, y el movimiento se comprueba en el nivel 4 con verificar-independente.py, que dice PULADO (omitido) cuando falta la herramienta.

Requisitos

Lo que necesitas

Para ejecutar el plan basta Python para las pruebas y un agente con sesión iniciada por suscripción. Docker solo entra en la verificación final; Evolution y Telegram son opcionales y tuyos. Para los videos de los ejercicios, Node 22 o más nuevo, HyperFrames y ffprobe.

Python 3.10+ y pytest

Las pruebas usan pytest (herramienta de desarrollo). La aplicación en sí no tendrá dependencias.

# comprobar
python3 --version
python3 -m pip install pytest

Claude Code o Codex

Por suscripción, sin API de pago. Para el loop headless, clona execucao-longa en ~/projetos.

# comprobar
codex --version   # o: claude --version

Docker, Evolution y Telegram

Docker hace el build final de la verificación independiente. Una instancia de Evolution y un bot de Telegram solo si quieres los canales; las credenciales quedan en el .env.

# comprobar
docker --version
Guía de uso · paso a paso

Del clon al sistema implementado, en tu entorno

Los comandos de abajo son los del repositorio. El ciclo: responder las decisiones, congelar el contrato, ejecutar el agente hasta 99 passed y LIMITES OK, comprobar con la verificación independiente, generar los videos y pedir la revisión de un profesional de educación física.

1

Clona el repositorio

Todavía no existe ./atende: el repositorio solo tiene el plan. Comprueba que la suite se recolecta sin errores y que aún nada pasa (sin la implementación, las pruebas fallan o dan error, y eso es lo esperado).

git clone https://github.com/inematds/atende-academia && cd atende-academia
python3 -m pytest -q --collect-only | tail -n 1   # 99 tests collected
python3 -m pytest -q | tail -n 1                  # 30 failed, 69 errors (0 passed)
2

Responde las decisiones abiertas

Lee docs/DECISOES-ABERTAS.md: son 20 propuestas por defecto ya aplicadas en la especificación y en las pruebas. Responder "ok en todo" destraba la ejecución. Si cambias algo marcado con ⚠ (por ejemplo la reactivación solo con consentimiento, la falta automática o el plazo de cancelación), edita docs/ESPECIFICACAO.md y tests/ antes del paso 3 y revisa el conteo. Para un piloto real, cambia también exemplos/academia.json por tu grilla, planes, profesores, FAQ y ejercicios.

less docs/DECISOES-ABERTAS.md
python3 -m pytest -q --collect-only | tail -n 1
3

Congela el contrato

Con el git status limpio, el script guarda el hash de tests/, pytest.ini, la especificación y los verificadores en hash-congelado.txt y hace un commit. Desde entonces, cualquier cambio en las pruebas se detecta.

git status
bash longrun/2026-10-05-academia-v1/congelar.sh
4

Ejecuta el agente (elige un camino)

a) Loop headless con Codex (recomendado). El loop.env define 20 ciclos de 30 min, 8 GB por ciclo, parada tras 3 ciclos sin avance, modelo gpt-6-astra y CODEX_ARGS="-c sandbox_workspace_write.network_access=true": sin eso el sandbox de Codex bloquea el servidor local de las pruebas.

~/projetos/execucao-longa/tools/loop-longrun.sh longrun/2026-10-05-academia-v1

b) /goal en Claude Code. Abre una sesión nueva de Claude Code en la carpeta del proyecto y sigue longrun/2026-10-05-academia-v1/prompt-goal-claude.md: pega la condición de /goal (la salida debe mostrar 99 passed y LIMITES OK) y, como primer mensaje, el bloque de prompt-goal-codex.md.

claude   # sesión nueva, dentro de atende-academia

c) Codex TUI ya abierto. Pega todo el contenido de longrun/2026-10-05-academia-v1/prompt-goal-codex.md (empieza con /goal).

codex -c sandbox_workspace_write.network_access=true
5

Haz el seguimiento

En el loop, loop.log muestra cada ciclo y progress.md trae una línea por checkpoint; state.md dice qué funciona, qué falta y cómo retomar. Una prueba en conflicto con la especificación va a failures.md: es una compuerta humana, y el agente no debe ajustar pruebas ni especificación.

tail -f longrun/2026-10-05-academia-v1/loop.log
cat longrun/2026-10-05-academia-v1/state.md
6

Comprueba con la verificación independiente

Cuando el agente diga "terminado", ejecuta los tres comandos. El último el agente nunca lo vio: busca valores del fixture copiados en el código, levanta un gimnasio que nunca apareció (otra grilla, otros planes y plazos, un feriado, otro reloj), abre 3 SVG en un Chromium para probar que se mueven, renderiza un ejercicio con HyperFrames y hace docker build con healthcheck. Sin Chromium, sin HyperFrames o sin Docker, esas etapas salen como PULADO, nunca como OK. Después abre /, /equipe y /exercicios/prancha en el navegador.

python3 -m pytest -q tests/                                         # 99 passed
bash longrun/2026-10-05-academia-v1/verificar-limites.sh               # LIMITES OK
python3 longrun/2026-10-05-academia-v1/verificar-independente.py      # INDEPENDENTE OK
7

Genera los videos MP4 de los ejercicios

Paso humano, después de la implementación: tools/render-exercicios (escrito por el agente) usa solo el HyperFrames ya instalado, no descarga nada, y necesita Node 22 o más nuevo, Chromium y ffprobe. Genera web/exercicios/<id>.mp4 (4 s, 720×720, sin audio) a partir de cada SVG. Instala HyperFrames después de que el loop termine, porque el agente no debe descargar paquetes. WhatsApp descarga el video desde la URL pública, así que el camino del MP4 exige PUBLIC_URL con HTTPS.

npm install hyperframes
tools/render-exercicios --ids agachamento,prancha --saida web/exercicios
8

Ejecuta tu gimnasio

Con el sistema implementado, copia el ejemplo, cambia el token y levanta el servidor. El chat del alumno queda en /, la página del equipo en /equipe (header X-Token) y cada ejercicio en /exercicios/<id>. El despliegue en el VPS es tuyo, con tus credenciales; el guion (Docker, webhooks de Evolution y Telegram, respaldo) lo escribe el agente en el README, sección 22 de la especificación.

mkdir -p dados && cp exemplos/academia.json dados/academia.json
./atende serve --porta 8080 --dados dados
./atende raiox --dados dados --mes 2026-10 --acompanhamento acompanhamento.json

⚠️ Antes de usar con un alumno real: revisión de un profesional de educación física

Los 12 SVG son figuras esquemáticas dibujadas por el implementador, y los pasos, errores comunes y cuidados de cada ejercicio se escribieron como ejemplo: un profesional de educación física debe revisar todo antes de llegar a un alumno real, incluida la lista de palabras de alerta de salud. Las reglas del consejo profesional (CREF/CONFEF, los consejos brasileños de educación física) no se investigaron: la salvaguarda de campañas es solo el mínimo seguro (promesa de resultado y "antes y después"), sin citar ningún artículo, y el dueño confirma las reglas antes de publicar cualquier campaña (decisión 5). La base legal de la evaluación física, dato sensible, también la confirma el dueño o un abogado (decisión 6).

Qué trae el kit

Contrato, pruebas y salvaguardas, con los números reales

Todo lo que el agente necesita para construir, y todo lo que impide que finja haber construido.

99 pruebas de aceptación

Caja negra, por HTTP y por línea de comandos, en 13 archivos.

test_integracoes.py           16
test_exercicios_svg.py        14
test_aulas.py                 12
test_alunos_planos.py          9
test_conversa.py               8
test_treino.py                 6
test_cadastros.py              6
test_basico.py                 6
test_docker.py                 5
test_checkin.py                5
test_campanhas.py              5
test_avaliacao.py              4
test_lgpd_raiox.py             3

Especificación de 23 secciones

docs/ESPECIFICACAO.md, secciones 0 a 22: ejecución, academia.json, alumnos, planes y matrículas, clases grupales, check-in, entrenamiento, explicación animada, evaluación física, API HTTP, conversación, tareas, campañas y la salvaguarda de publicidad, Raio-X, LGPD, Evolution, Telegram y Docker. El cobro por Pix o tarjeta, el torniquete, la app del alumno, las clases personalizadas y varios gimnasios en el mismo servidor están explícitamente fuera (sección 16).

Salvaguardas contra atajos

Hash congelado de tests/, pytest.ini, la especificación y los verificadores. Alcance de archivos: el agente solo toca el código y sus propios registros. Sin clave de API, sin URL externa en el código, sin 0.0.0.0 y sin SMIL ni script en los SVG. verificar-limites.sh comprueba todo eso e imprime LIMITES OK.

Verificación independiente

Nivel 4, oculto para el agente: busca valores del fixture en el código, levanta un gimnasio nunca visto, comprueba el movimiento de los SVG y el MP4 cuando existen las herramientas, y hace docker build y healthcheck. Solo así "99 passed" prueba una lógica general.

20 decisiones ya propuestas

Lenguaje, canales, cobro solo manual, salvaguarda de campañas, evaluación física como dato sensible, reactivación con consentimiento, falta automática, cancelación tardía, check-in por código, los 12 ejercicios con animación solo CSS y Raio-X. Solo los ítems marcados con ⚠ cambian el contrato.

Validado por un agente adversarial

Un validador que no vio la planificación comparó pruebas con especificación e intentó burlar las salvaguardas. Encontró y corrigió 10 problemas: 2 bloqueaban la ejecución, 5 estorbaban y 3 eran cosméticos. El principal: la especificación aceptaba SMIL, y el render de HyperFrames no tiene adaptador SMIL, medido en un render real. El relato completo está en docs/VALIDACAO.md y cada corrección tiene una línea en FALHAS.md.

Las reglas de negocio vienen de Raio-X

Falta sin aviso, horario ocioso, alumno que no vuelve y recepción atada a la agenda: docs/MAPA-RAIO-X.md vincula cada fuga del paquete de servicios con una pieza de la v1 o con el motivo de quedar fuera. Raio-X no trae cifras de mercado de gimnasios, así que faltas, ocupación y renovación quedan como premisa para medir en tu propio gimnasio. Detalles en la guía de Raio-X de Margem.

Reglas brasileñas incorporadas

La LGPD (aviso de vencimiento, espera y clase cancelada como ejecución del contrato; reactivación y campaña solo con consentimiento; evaluación física como dato sensible; exportar y anonimizar) y el 192 para emergencias. La regla del consejo profesional (CREF/CONFEF) todavía no se investigó. Fuera de Brasil, cámbialo por la ley de privacidad, el consejo profesional y el número de emergencia locales.

Roadmap

Dónde está y hacia dónde va

El plan está listo y validado. La implementación todavía no existe: nace cuando ejecutas el /goal o el loop, con el método execucao-longa. atende-clinica siguió el mismo camino y cerró 93 de 93.

Plan ✅
Especificación, pruebas y salvaguardas validadasContrato de 23 secciones, 99 pruebas de aceptación, 20 decisiones propuestas, mapa hacia Raio-X y validación adversarial concluida el 05/10/2026.
Implementación
Tú ejecutas el /goal o el loopResponder las decisiones, congelar el contrato y dejar que el agente trabaje hasta 99 passed y LIMITES OK, y luego la verificación independiente. Hoy el sistema no está implementado.
Videos
MP4 de los ejercicios, en tu máquinaEjecutar tools/render-exercicios una vez, con HyperFrames instalado, y publicar los archivos junto con PUBLIC_URL.
Piloto
En un gimnasio realCambiar el ejemplo por la grilla, planes y ejercicios verdaderos, tener la revisión de un profesional de educación física, confirmar las reglas de CREF/CONFEF, publicar en el VPS y seguir faltas, ocupación, renovación y frecuencia en el Panel de Recuperación de Raio-X.
Después
Fuera de la v1Cobro, torniquete, app del alumno, clases personalizadas, varios gimnasios, inicio de sesión por usuario, LLM en las respuestas e interfaz en EN/ES quedan para una próxima versión, con compuerta humana.