Monorepo para planificar guardias hospitalarias con un solver de flujo maximo en C++ y una capa de API/Web en Node.js + React.
El proyecto esta congelado en alcance V1 (flujo basico).
Ver detalle: docs/SCOPE_V1.md.
Planificar guardias hospitalarias de forma manual escala mal: muchas restricciones, cambios de ultimo momento y conflictos de equidad entre profesionales.
Con equipos de 15-50 medicos y decenas de dias criticos al ano, una planificacion manual suele ser:
- Lenta (horas o dias de ajustes).
- Fragil (errores de cobertura o sobrecarga de personas).
- Dificil de justificar (sin evidencia matematica de equidad).
MaxFlow Shift Optimizer no es solo un asignador de turnos; es un motor de factibilidad y resiliencia operativa:
- Garantiza cobertura bajo restricciones duras.
- Distribuye carga con criterios matematicos consistentes.
- Diagnostica por que un escenario no es factible (Min-Cut/bottlenecks).
- Permite reparar o simular cambios sin rehacer todo desde cero.
En la practica, permite pasar de planificaciones manuales e inestables a un flujo auditable, repetible y rapido.
- Core C++ dedicado al calculo (latencia baja en escenarios complejos).
- API con autenticacion, roles y trazabilidad (auditoria).
- Frontend operativo para usuarios admin y medicos.
- Versionado de planes para comparar, publicar y controlar riesgo.
- Exportes y reportes listos para operacion diaria.
Aunque este repo esta orientado al dominio hospitalario, el core en C++ implementa un patron general de asignacion de recursos con restricciones usando flujo en redes.
Eso permite reutilizar el motor para otros contextos, por ejemplo:
- Asignacion de agentes a franjas horarias en call centers.
- Planificacion de rutas/cupos en logistica.
- Asignacion de docentes a cursos y bloques.
- Distribucion de personal tecnico en guardias de soporte.
En resumen: cambia el modelo de entrada y reglas de capacidad, pero el motor de optimizacion sigue siendo el mismo.
- Solver C++17 (Edmonds-Karp) con diagnostico Min-Cut para casos no factibles.
- API Express + Prisma para auth, medicos, periodos, configuracion y solver.
- Frontend React con flujo directo: cargar datos, ejecutar solver, ver asignaciones.
apps/core: solver C++ y tests del algoritmo.apps/api: backend REST + Prisma + Swagger.apps/web: frontend React + Vite.packages/shared: esquemas compartidos (validaciones/tipos).scripts: automatizaciones de entorno y escenarios.
Documentacion por modulo:
apps/core/README.mdapps/api/README.mdapps/web/README.mdARCHITECTURE.md
- Node.js 18+
- npm 9+
g++con soporte C++17make- Linux/macOS (en Windows, usar WSL2 para scripts
.sh)
Desde la raiz del repo:
npm install
make devEsto compila apps/core, prepara la API (prisma generate + migraciones) y levanta backend en modo desarrollo.
URLs:
- API:
http://localhost:3000 - Swagger:
http://localhost:3000/api-docs
En otra terminal:
make web- Frontend:
http://localhost:5173
- Levanta backend y core:
make dev- En otra terminal, levanta frontend:
make web- Entra a
http://localhost:5173e inicia sesion con usuario admin de desarrollo (admin@hospital.com/admin123). - Carga un escenario:
make feasible- Desde la UI ejecuta el solver y revisa asignaciones o diagnostico de infactibilidad.
Nota: las credenciales de arriba son solo para entorno local de desarrollo.
make feasible # escenario factible
make infeasible # escenario infactible (diagnostico Min-Cut)
make test # entorno manual de pruebasmake test-api
make test-web
make test-all
make release-gate
make release-gate-fastmake release-gate ejecuta el checklist automatizado de salida MVP:
- build del solver C++
- lint API + Web
- tests API + Web
- verificacion de estado de migraciones Prisma
make release-gate-fast ejecuta una version rapida para PRs:
- build del solver C++
- lint API + Web
- tests unitarios de API
- tests focalizados de front para rutas/roles
| Rol | Acceso principal |
|---|---|
ADMIN |
Gestion de usuarios, medicos, periodos, configuracion y ejecucion del solver. |
MEDICO |
Gestion de su disponibilidad y consulta de guardias asignadas. |
LECTOR |
Consulta de asignaciones y vistas operativas habilitadas. |
Rutas principales:
POST /auth/loginPOST /auth/register(admin)GET/POST/PUT/DELETE /medicosGET/POST/PUT/DELETE /periodosGET/PUT /configuracionPOST /asignaciones/ejecuciones(alias legacy:POST /asignaciones/resolver)GET /asignacionesGET /reportes/equidad,GET /reportes/faltantesGET /auditoriaGET /export/excel,GET /export/ics
Rendimiento esperado en escenarios hospitalarios medianos (referencial):
- Resolucion del solver en milisegundos a decenas de milisegundos.
- Diagnostico de no factibilidad en la misma corrida (sin proceso adicional manual).
- Flujo operativo completo (resolver + revisar reporte) en minutos desde UI.
Para publicar benchmarks oficiales, conviene medir en tu entorno con dataset y hardware fijos.
- Estado actual:
usablepara entorno de desarrollo y validacion funcional. - Alcance actual: V1 basico (periodos + disponibilidad + solver + resultados).
- Fuera de alcance en esta etapa: laboratorio/versionado/aprobaciones avanzadas.
Pendiente agregar imagenes/GIF del flujo real de uso. Recomendado incluir:
- Login + dashboard.
- Ejecucion del solver.
- Reporte de equidad.
Si quieres, puedo crear ahora una carpeta docs/screenshots/ y dejar el bloque markdown listo para insertar las capturas apenas las tengas.
- Arquitectura general:
ARCHITECTURE.md - Solver C++:
apps/core/README.md - API:
apps/api/README.md - Frontend:
apps/web/README.md - Runbook operativo:
docs/OPERATIONS_RUNBOOK.md - Checklist Go/No-Go MVP:
docs/GO_NO_GO_CHECKLIST.md
make prod
make stopVariables recomendadas para el admin inicial:
ADMIN_EMAILADMIN_PASSWORDADMIN_NAME(opcional)
Si no se definen, se usan defaults de desarrollo.
MIT. Ver LICENSE.