Saltar al contenido principal

Referencia de la API

Tabla de rutas del sidecar Fastify (los rutas-*.ts de cada dominio de server/). 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étodoRutaPropósitoAcceso
GET/healthEstado del servidor (usado por el health-gate de Tauri).Público
POST/api/auth/loginInicia sesión (email + contraseña); devuelve JWT. Con rate-limit.Público
GET/api/auth/meDevuelve el usuario actual; revalida que siga activo.Token
GET/api/setup/status¿La app necesita configuración inicial? (sin usuarios).Público
POST/api/setupCrea 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étodoRutaPropósitoAcceso
POST/api/recovery/requestGenera una solicitud (requestCode + requestBlob con correos enmascarados).Público
POST/api/recovery/previewValida la autorización firmada sin aplicar; devuelve a qué gerente apunta.Público
POST/api/recovery/applyVerifica 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étodoRutaPropósitoAcceso
GET/api/membersLista miembros (filtros archived, search); marca pagos pendientes.Token
GET/api/members/:idDetalle del miembro con pagos y mensajes WhatsApp.Token
POST/api/membersAlta con plan inicial + primer pago (transacción atómica).Token
PATCH/api/members/:idEdita datos básicos; archivar requiere gerente.Token / 🔒
POST/api/members/:id/renewRenueva la membresía (aplica reglas de fecha).Token

Membresías (planes)​

MétodoRutaPropósitoAcceso
GET/api/membershipsLista planes activos.Token
POST/api/membershipsCrea un plan.🔒
PATCH/api/memberships/:idEdita un plan.🔒
DELETE/api/memberships/:idBorra/desactiva un plan (lógico si tiene miembros).🔒

Pagos y transacciones​

MétodoRutaPropósitoAcceso
POST/api/payments/:id/confirmConfirma un pago pendiente (registra ID externo; el trigger WhatsApp asociado permanece experimental).🔒
GET/api/transactionsLista movimientos (filtros tipo/periodo/estado/búsqueda).Token
POST/api/transactionsRegistra un movimiento; gastos requieren gerente.Token / 🔒
POST/api/transactions/:id/confirmConfirma una venta pendiente (tarjeta/transferencia).Token
POST/api/transactions/:id/voidAnula un movimiento confirmado (crea gemela compensatoria).🔒
GET/api/sales/:idDevuelve la compra completa agrupada, sus líneas, devoluciones y totales.Token
POST/api/sales/:id/voidAnula una compra completa, compensa sus líneas y repone stock.🔒
POST/api/sales/:id/returnsRegistra una devolución parcial por cantidades, método y motivo.🔒
GET/api/customers/:id/creditConsulta el crédito a favor local de un cliente.Token
GET/api/categoriesLista categorías (`kind=productexpense`).

Productos y ventas​

MétodoRutaPropósitoAcceso
GET/api/productsLista productos del inventario.Token
POST/api/productsCrea un producto.🔒
PATCH/api/products/:idEdita un producto.🔒
DELETE/api/products/:idBorra/desactiva un producto.🔒
POST/api/categoriesCrea una categoría (producto o gasto).🔒
DELETE/api/categories/:idBorra una categoría.🔒
POST/api/salesRegistra una venta de productos (POS, varios items, descuenta stock).Token
GET/api/products/:id/inventory-movementsLista el libro de movimientos de existencias de un producto.🔒
POST/api/products/:id/inventory-adjustmentsRegistra reposición o corrección de conteo con nota obligatoria.🔒

Confirmado contra server/dinero/rutas-products.ts y server/dinero/rutas-returns.ts: GET /api/products y POST /api/sales usan solo token (recepción puede vender); catálogo, devoluciones, anulación completa y ajustes de existencias son solo gerente (🔒, vía requireGerente). La confirmación de tarjeta/transferencia se hace por la línea pendiente pero reclama la identidad de Sale para confirmar toda la compra de forma atómica.

Reportes​

MétodoRutaPropósitoAcceso
GET/api/reports/monthlyReporte de 6 meses + desgloses del mes (legacy).Token
GET/api/reports/rangeReporte por rango from/to; deltas, serie, desgloses.Token
GET/api/dashboard/summaryResumen para el tablero principal.Token

Gimnasio, usuarios y configuración​

MétodoRutaPropósitoAcceso
GET/api/gymDatos del gimnasio (nombre, dirección, logo…).Token
PATCH/api/gymEdita los datos del gimnasio.🔒
GET/api/usersLista usuarios del sistema.🔒
POST/api/usersCrea un usuario (gerente/recepción).🔒
PATCH/api/users/:idEdita/activa/desactiva un usuario.🔒
DELETE/api/users/:idElimina un usuario.🔒
GET/api/settingsLee configuración de infraestructura (carpeta de respaldo).🔒
GET/api/settings/summaryResume estados y contadores del índice de Ajustes en una sola petición.🔒
PATCH/api/settingsEdita la configuración de infraestructura.🔒
GET/api/notifications/backgroundLista liviana de DTE no validados y pruebas de WhatsApp fallidas que alimentan la campana persistente.🔒

Confirmado contra server/gimnasio/rutas-gym.ts, server/acceso/rutas-users.ts y server/gimnasio/rutas-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)​

Contrato local, no integración fiscal. En la versión actual toda emisión devuelve modo="SIMULACION" y estadoMh=null. Ninguna ruta firma, transmite, consulta ni obtiene acuse del Ministerio de Hacienda.

MétodoRutaPropósitoAcceso
GET/api/dte/configLee la configuración fiscal del emisor.🔒
PATCH/api/dte/configActualiza datos del emisor usados por la simulación.🔒
GET/api/facturasListado paginado por mes, filtros y resumen mensual.🔒
GET/api/dteLista local de DTE de simulación con sus metadatos.🔒
GET/api/dte/transaction/:transactionIdBusca el DTE 01/03 de un movimiento sin descargar el listado completo.🔒
GET/api/dte/:idDevuelve el documento local completo y metadatos de simulación.🔒
POST/api/dte/emitGenera localmente Factura (01) o Crédito Fiscal (03) para una transacción.🔒
POST/api/dte/:id/invalidacionRegistra un evento local de invalidación (tipoAnulacion=2); no lo transmite.🔒
POST/api/dte/:id/nota-creditoRuta legado: responde 501 y no muta datos.🔒

Confirmado contra server/facturas/rutas-dte.ts: todo el módulo es solo gerente. Generar un DTE rechaza transacciones que ya tienen documento activo. Los motivos de invalidación que exigen reemplazo permanecen bloqueados; la ruta histórica de Nota de Crédito no es una vía de corrección vigente.

WhatsApp (Twilio)​

Backend experimental. Implementa cifrado, ping, envío con body libre, webhook firmado y logs. No implementa ContentSid/ContentVariables, no registra consentimiento/opt-in del miembro y no constituye una integración de producción.

MétodoRutaPropósitoAcceso
GET/api/wa/templatesLista plantillas de mensajes.🔒
POST/api/wa/templatesCrea una plantilla.🔒
PATCH/api/wa/templates/:idEdita una plantilla.🔒
DELETE/api/wa/templates/:idElimina una plantilla.🔒
GET/api/wa/logBitácora de mensajes enviados (filtro por estado).🔒
GET/api/wa/configConfiguración de Twilio (sin exponer el token).🔒
PATCH/api/wa/configEdita config de Twilio (cifra el token at-rest).🔒
POST/api/wa/pingVerifica credenciales de Twilio sin enviar.🔒
POST/api/wa/testEnvía body libre sólo para una prueba controlada (sandbox).🔒
POST/api/wa/sendEjecuta una prueba de plantilla exclusivamente contra el teléfono de sandbox guardado y registra el intento.🔒
POST/api/wa/trigger-nowRuta interna/legado para ejecutar el motor experimental; no se expone en el rediseño.🔒
POST/api/wa/webhookWebhook de Twilio: valida firma y actualiza estado de entrega.Público

El backend automático permanece desactivado con twilioConnected=false. Para producción faltan sender registrado, plantillas aprobadas, consentimiento verificable, callback HTTPS público y QA E2E real.

Bitácora y respaldo​

MétodoRutaPropósitoAcceso
GET/api/auditBitácora administrativa (últimas 200 acciones, con actor).🔒
GET/api/backup/statusEstado del último respaldo.🔒
POST/api/backup/nowRespalda ahora (snapshot manual).🔒
POST/api/backup/restorePrepara una restauración (se aplica al reiniciar).🔒