Skip to main content

Visión general

Oxitesa son tres aplicaciones y una base de datos. Todo lo que pasa en el negocio termina en MySQL, y buena parte de la lógica transaccional vive ahí adentro en forma de stored procedures.

Piezas

Nginx hace de reverse proxy delante de todo: sirve la consola web como estático y proxea /api al container node-app.

Un entry point, muchos roles

src/index.ts es la API y todos los workers a la vez. Lo que corre lo decide la variable de entorno EXECUTION_MODE, y en docker-compose.yml hay un container por rol. El detalle está en Workers y colas.

Ciclo de vida de un request

Las cuatro cosas que hay que saber de ese diagrama:

  1. La autenticación es local. El backend verifica el JWT de Clerk contra la firma y el template_name; no llama a la API de Clerk. Ver Autenticación.
  2. Todo endpoint devuelve CustomResponse. Nunca data cruda.
  3. Un error de negocio viaja como HTTP 200 con success: false, no como 4xx. Los 400 quedan para errores de class-validator y los 500 para excepciones no manejadas.
  4. Los controllers se registran explícitamente en una lista. Si no lo agregás ahí, tu endpoint no existe (y no hay ningún error que te avise).

Multi-esquema

MySQL, con cinco esquemas que representan cinco áreas del negocio:

EsquemaQué guarda
configurationCatálogos maestros e identidad: usuarios, roles, productos, elementos, convenios, estados, vehículos, reportes
customerPacientes y sus datos
financesEl núcleo operativo: autorizaciones, remitos, hojas de ruta, almacenes, empleados, facturación e inventario
callcenterRegistro de contactos con el paciente y motor de encuestas
logsAuditoría, logs del bot PAMI, logs del mobile, mensajes de WhatsApp

Detalle en Modelo de datos.

Qué pasa en cada repo

  • oxitesa-backend — capas controller → service → TypeORM, con módulos de feature autocontenidos para lo nuevo. Ver Backend y Módulos de feature.
  • oxitesa-front — Angular standalone, signals, todo listado paginado server-side. Ver Estructura del front.
  • oxitec-mobile-app — offline-first: la app funciona entera sin señal y sincroniza después. Ver Offline-first.
Los secretos no viven en la documentación

Credenciales de PAMI, claves de Clerk, tokens de WhatsApp, credenciales de base de datos y de R2 son variables de entorno de cada ambiente. En estos docs solo aparecen nombres de variables, nunca valores.