Tabla de rutas del sidecar Fastify (server/routes/). El servidor escucha solo
en 127.0.0.1:3001. Salvo las rutas públicas, todas exigen
Authorization: Bearer <JWT>; algunas exigen además el rol gerente
(marcadas con 🔒).
Esta tabla se extrajo del código real. Los cuerpos/parámetros se validan con
Zod en cada handler.
Autenticación y setup
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /health | Estado del servidor (usado por el health-gate de Tauri). | Público |
| POST | /api/auth/login | Inicia sesión (email + contraseña); devuelve JWT. Con rate-limit. | Público |
| GET | /api/auth/me | Devuelve el usuario actual; revalida que siga activo. | Token |
| GET | /api/setup/status | ¿La app necesita configuración inicial? (sin usuarios). | Público |
| POST | /api/setup | Crea el primer gerente + datos del gym (solo con 0 usuarios). | Público* |
* Se auto-protege: responde 403 si ya existe algún usuario.
Recuperación asistida
Flujo para recuperar el acceso cuando el cliente perdió contraseña y correo.
Ver Recuperación asistida de acceso. Rutas públicas
con rate-limit por IP; la mutación solo ocurre tras verificar una autorización
firmada (Ed25519) por el desarrollador.
| Método | Ruta | Propósito | Acceso |
|---|
| POST | /api/recovery/request | Genera una solicitud (requestCode + requestBlob con correos enmascarados). | Público |
| POST | /api/recovery/preview | Valida la autorización firmada sin aplicar; devuelve a qué gerente apunta. | Público |
| POST | /api/recovery/apply | Verifica la autorización y fija nuevo correo/contraseña del gerente (reactiva si estaba inactivo). | Público |
Verificación fail-closed: firma EdDSA válida, exp obligatorio, installationId
contra DB, solicitud pending y no vencida, targetUserId firmado y nonce de un
solo uso. Cada intento queda en la bitácora (recovery.*).
Miembros
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /api/members | Lista miembros (filtros archived, search); marca pagos pendientes. | Token |
| GET | /api/members/:id | Detalle del miembro con pagos y mensajes WhatsApp. | Token |
| POST | /api/members | Alta con plan inicial + primer pago (transacción atómica). | Token |
| PATCH | /api/members/:id | Edita datos básicos; archivar requiere gerente. | Token / 🔒 |
| POST | /api/members/:id/renew | Renueva la membresía (aplica reglas de fecha). | Token |
Membresías (planes)
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /api/memberships | Lista planes activos. | Token |
| POST | /api/memberships | Crea un plan. | 🔒 |
| PATCH | /api/memberships/:id | Edita un plan. | 🔒 |
| DELETE | /api/memberships/:id | Borra/desactiva un plan (lógico si tiene miembros). | 🔒 |
Pagos y transacciones
| Método | Ruta | Propósito | Acceso |
|---|
| POST | /api/payments/:id/confirm | Confirma un pago pendiente (registra ID externo, dispara WhatsApp). | 🔒 |
| GET | /api/transactions | Lista movimientos (filtros tipo/periodo/estado/búsqueda). | Token |
| POST | /api/transactions | Registra un movimiento; gastos requieren gerente. | Token / 🔒 |
| POST | /api/transactions/:id/confirm | Confirma una venta pendiente (tarjeta/transferencia). | Token |
| POST | /api/transactions/:id/void | Anula un movimiento confirmado (crea gemela compensatoria). | 🔒 |
| GET | /api/categories | Lista categorías (`kind=product | expense`). |
Productos y ventas
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /api/products | Lista productos del inventario. | Token |
| POST | /api/products | Crea un producto. | 🔒 |
| PATCH | /api/products/:id | Edita un producto. | 🔒 |
| DELETE | /api/products/:id | Borra/desactiva un producto. | 🔒 |
| POST | /api/categories | Crea una categoría (producto o gasto). | 🔒 |
| DELETE | /api/categories/:id | Borra una categoría. | 🔒 |
| POST | /api/sales | Registra una venta de productos (POS, varios items, descuenta stock). | Token |
Confirmado contra server/routes/products.ts: GET /api/products y
POST /api/sales usan solo token (recepción puede vender); crear/editar/borrar
productos y categorías es solo gerente (🔒, vía requireGerente).
Reportes
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /api/reports/monthly | Reporte de 6 meses + desgloses del mes (legacy). | Token |
| GET | /api/reports/range | Reporte por rango from/to; deltas, serie, desgloses. | Token |
| GET | /api/dashboard/summary | Resumen para el tablero principal. | Token |
Gimnasio, usuarios y configuración
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /api/gym | Datos del gimnasio (nombre, dirección, logo…). | Token |
| PATCH | /api/gym | Edita los datos del gimnasio. | 🔒 |
| GET | /api/users | Lista usuarios del sistema. | 🔒 |
| POST | /api/users | Crea un usuario (gerente/recepción). | 🔒 |
| PATCH | /api/users/:id | Edita/activa/desactiva un usuario. | 🔒 |
| DELETE | /api/users/:id | Elimina un usuario. | 🔒 |
| GET | /api/settings | Lee configuración de infraestructura (carpeta de respaldo). | 🔒 |
| PATCH | /api/settings | Edita la configuración de infraestructura. | 🔒 |
Confirmado contra server/routes/{gym,users,settings}.ts: GET /api/gym usa
token; PATCH /api/gym, todas las rutas de /api/users (incluido GET) y
GET/PATCH /api/settings son solo gerente (🔒, vía requireGerente).
Facturación electrónica (DTE)
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /api/dte/config | Lee la configuración fiscal del emisor. | 🔒 |
| PATCH | /api/dte/config | Actualiza NIT, NRC, actividad, ambiente y datos del emisor. | 🔒 |
| GET | /api/dte | Lista documentos emitidos con estado y metadatos. | 🔒 |
| GET | /api/dte/:id | Devuelve el DTE completo persistido. | 🔒 |
| POST | /api/dte/emit | Emite factura (01) o comprobante de crédito fiscal (03) para una transacción. | 🔒 |
| POST | /api/dte/:id/nota-credito | Emite Nota de Crédito (05) para compensar un documento original. | 🔒 |
Confirmado contra server/routes/dte.ts: todo el módulo es solo gerente.
Emitir un DTE rechaza transacciones que ya tienen documento fiscal activo; la
corrección se hace mediante Nota de Crédito.
WhatsApp (Twilio)
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /api/wa/templates | Lista plantillas de mensajes. | 🔒 |
| POST | /api/wa/templates | Crea una plantilla. | 🔒 |
| PATCH | /api/wa/templates/:id | Edita una plantilla. | 🔒 |
| DELETE | /api/wa/templates/:id | Elimina una plantilla. | 🔒 |
| GET | /api/wa/log | Bitácora de mensajes enviados (filtro por estado). | 🔒 |
| GET | /api/wa/config | Configuración de Twilio (sin exponer el token). | 🔒 |
| PATCH | /api/wa/config | Edita config de Twilio (cifra el token at-rest). | 🔒 |
| POST | /api/wa/ping | Verifica credenciales de Twilio sin enviar. | 🔒 |
| POST | /api/wa/test | Envío de prueba a un número arbitrario. | 🔒 |
| POST | /api/wa/send | Envía una plantilla a un miembro real y registra en bitácora. | Token |
| POST | /api/wa/trigger-now | Dispara los recordatorios diarios manualmente. | 🔒 |
| POST | /api/wa/webhook | Webhook de Twilio: valida firma y actualiza estado de entrega. | Público |
Bitácora y respaldo
| Método | Ruta | Propósito | Acceso |
|---|
| GET | /api/audit | Bitácora administrativa (últimas 200 acciones, con actor). | 🔒 |
| GET | /api/backup/status | Estado del último respaldo. | 🔒 |
| POST | /api/backup/now | Respalda ahora (snapshot manual). | 🔒 |
| POST | /api/backup/restore | Prepara una restauración (se aplica al reiniciar). | 🔒 |