Prototipo Funcional Avanzado - Sistema de Salud

Panel Principal del Sistema

Sistema integral para gestión de solicitudes de tiempo libre con verificación automática de cobertura, notificaciones inteligentes y análisis predictivo de disponibilidad de personal.

Nueva Solicitud

Solicite vacaciones, licencias médicas o días personales

Solicitudes Pendientes
3

Requieren aprobación del gestor de turnos

Cobertura de Turnos
92% Adecuada

El sistema verifica automáticamente la cobertura

Notificaciones
5

Alertas y actualizaciones del sistema

Mis Solicitudes Recientes

Fecha Solicitud Periodo Tipo Departamento Estado Cobertura Acciones
10 Nov 2025 25-27 Nov 2025 Vacaciones Urgencias Aprobada Adecuada
5 Nov 2025 18-20 Nov 2025 Licencia Médica Medicina Interna Pendiente Alerta
1 Nov 2025 10 Nov 2025 Día Personal Pediatría Rechazada Crítica
12 Nov 2025 15-17 Nov 2025 Vacaciones Urgencias Pendiente Crítica

Funcionalidades del Sistema

Verificación Automática de Cobertura

Análisis en tiempo real de la disponibilidad de personal por departamento y turno

Flujo de Verificación
  1. El usuario selecciona fechas de solicitud
  2. El sistema consulta la base de datos de turnos
  3. Calcula el porcentaje de cobertura requerida
  4. Compara con los niveles mínimos por departamento
  5. Genera alertas y recomendaciones
Reglas de Negocio Implementadas
Urgencias: Mín. 3 médicos + 4 enfermeros/turno
Medicina: Mín. 2 médicos/turno
Pediatría: Mín. 2 pediatras + 3 enfermeros/turno
Cirugía: Mín. 1 cirujano + 2 anestesistas/turno
Enfermería: Mín. 3 enfermeros/turno
Lógica de Verificación (Backend)
function verificarCobertura(solicitud) {
// Obtener requerimientos por departamento
const requerimientos = getRequerimientosDepartamento(solicitud.departamento);
// Consultar disponibilidad de personal para el período
const disponibilidad = await db.query(`
SELECT COUNT(*) as disponibles FROM personal
WHERE departamento = $1
AND NOT EXISTS (
SELECT 1 FROM solicitudes
WHERE personal_id = personal.id
AND estado = 'aprobado'
AND fecha_inicio <= $3
AND fecha_fin >= $2
)
`, [solicitud.departamento, solicitud.inicio, solicitud.fin]);
// Calcular porcentaje de cobertura
const porcentaje = (disponibilidad[0].disponibles / requerimientos.minimo) * 100;
if (porcentaje < 50) {
return { nivel: 'critico', porcentaje, recomendacion: 'Requiere aprobación urgente del gestor' };
} else if (porcentaje < 80) {
return { nivel: 'alerta', porcentaje, recomendacion: 'Monitorear solicitudes adicionales' };
} else {
return { nivel: 'adecuado', porcentaje, recomendacion: 'Cobertura suficiente' };
}
}

Sistema de Notificaciones Inteligentes

Notificaciones contextuales basadas en reglas de negocio y prioridad de las solicitudes

Tipos de Notificaciones
Notificaciones Críticas
  • Cobertura por debajo del 50%
  • Solicitudes en departamentos críticos (Urgencias, Cirugía)
  • Conflictos de horarios detectados
Notificaciones de Alerta
  • Cobertura entre 50-80%
  • Solicitudes para fines de semana o feriados
  • Patrones históricos de ausencia detectados
Notificaciones Informativas
  • Solicitudes aprobadas/rechazadas
  • Recordatorios de solicitudes próximas
  • Estadísticas mensuales de uso
Lógica de Notificaciones (Backend)
class SistemaNotificaciones {
constructor() {
this.canalEmail = new CanalEmail();
this.canalApp = new CanalAppMovil();
this.canalWeb = new CanalWeb();
}
async enviarNotificacion(evento, destinatario) {
// Determinar prioridad y tipo de notificación
const config = this.determinarConfiguracion(evento);
// Generar mensaje personalizado
const mensaje = this.generarMensaje(evento, config);
// Enviar por canales según prioridad
if (config.prioridad === 'critica') {
await this.canalEmail.enviar(destinatario, mensaje);
await this.canalApp.push(destinatario, mensaje);
await this.canalWeb.alerta(destinatario, mensaje);
} else if (config.prioridad === 'alerta') {
await this.canalEmail.enviar(destinatario, mensaje);
await this.canalApp.push(destinatario, mensaje);
} else {
await this.canalEmail.enviar(destinatario, mensaje);
}
}
determinarConfiguracion(evento) {
if (evento.tipo === 'cobertura_critica' || evento.departamento === 'Urgencias') {
return { prioridad: 'critica', canal: 'todos' };
} else if (evento.cobertura < 80) {
return { prioridad: 'alerta', canal: 'email_app' };
} else {
return { prioridad: 'normal', canal: 'email' };
}
}
}

Gestión de Flujos de Trabajo

Automatización del proceso de solicitud, aprobación y confirmación con seguimiento en tiempo real

Flujo de Trabajo Completo
Solicitud
Usuario
Verificación
Automática
Aprobación
Gestor
Confirmación
Sistema
1. Crear solicitud
• Fechas
• Motivo
• Documentación
2. Verificación
• Cobertura
• Conflictos
• Reglas negocio
3. Aprobación
• Revisión
• Consulta
• Decisión
4. Confirmación
• Notificación
• Calendario
• Reportes
Gestión de Estados (Backend)
class GestorSolicitudes {
async crearSolicitud(datos) {
const solicitud = {
id: generarId(),
estado: 'pendiente',
fechaCreacion: new Date(),
...datos
};
// Verificación automática de cobertura
const verificacion = await verificarCobertura(solicitud);
solicitud.verificacion = verificacion;
// Guardar en base de datos
await db.insert('solicitudes', solicitud);
// Enviar notificaciones según resultado
if (verificacion.nivel === 'critico') {
await notificaciones.enviarAprobacionUrgente(solicitud);
} else if (verificacion.nivel === 'alerta') {
await notificaciones.enviarAprobacionNormal(solicitud);
}
return solicitud;
}
async aprobarSolicitud(id, gestorId) {
const solicitud = await db.find('solicitudes', id);
solicitud.estado = 'aprobado';
solicitud.aprobadoPor = gestorId;
solicitud.fechaAprobacion = new Date();
await db.update('solicitudes', id, solicitud);
// Actualizar calendario y notificar
await calendario.marcarAusencia(solicitud);
await notificaciones.enviarConfirmacion(solicitud);
return solicitud;
}
}

Calendario de Cobertura - Noviembre 2025

Vista por Departamento:
Crítico <50% Alerta 50-80% Adecuado >80%
Lunes
Martes
Miércoles
Jueves
Viernes
Sábado
Domingo
1
85%
2
82%
3
88%
4
90%
5
87%
6
72%
1 solicitud
7
68%
1 solicitud
8
84%
9
86%
10
42%
3 solicitudes
11
38%
3 solicitudes
12
84%
1 solicitud
13
88%
1 solicitud
14
Hoy
92%
15
45%
4 solicitudes
16
41%
4 solicitudes
17
43%
4 solicitudes
18
65%
2 solicitudes
19
82%
20
85%
21
89%
22
87%
23
70%
2 solicitudes
24
72%
2 solicitudes
25
85%
1 solicitud
26
87%
1 solicitud
27
83%
28
86%
29
84%
30
88%
Alerta de Cobertura Crítica

Los días 15-17 de noviembre presentan cobertura crítica en el departamento de Urgencias (solo 45% de personal disponible).

Solicitudes pendientes: 4 (3 médicos, 1 enfermero)
Personal mínimo requerido: 7 (3 médicos + 4 enfermeros)
Se requiere acción inmediata del gestor de turnos.

Métricas y Estadísticas del Sistema

98.7%
Satisfacción de Usuarios
18.2h
Tiempo Promedio Aprobación
4.8
Días Solicitados/Mes
93.4%
Cobertura Promedio
Distribución de Solicitudes
Cobertura por Departamento