#Modelación de operaciones de la clínica familiar #178 del IMSS en Zapopan, Jalisco #El objetivo es proponer más recursos dadas las largas filas de pacientes en la clínica #¿Se necesitan más enfermeras? ¿Se requiere otro consultorio?

#install.packages("simmer",dependencies=T) #Autores de esta función:BartSmeets e Iñaki Ucar
library(simmer)
library(simmer.plot)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.0.5
## 
## Attaching package: 'simmer.plot'
## The following objects are masked from 'package:simmer':
## 
##     get_mon_arrivals, get_mon_attributes, get_mon_resources
proceso<-simmer("Clinica familiar IMSS 178")
proceso
## simmer environment: Clinica familiar IMSS 178 | now: 0 | next: 
## { Monitor: in memory }
paciente<-trajectory("patients'path")%>%
  seize("enfermera",1)%>%
  timeout(function()rnorm(1,15))%>%
  release("enfermera",1)%>%
  
  seize("doctor",1)%>%
  timeout(function()rnorm(1,20))%>%
  release("doctor",1)%>%
  
  seize("farmacia",1)%>%
  timeout(function()rnorm(1,5))%>%
  release("farmacia",1)
proceso %>%
    add_resource("enfermera",2)%>%
    add_resource("doctor",3)%>%
    add_resource("farmacia",2)%>%
    add_generator("paciente",paciente, function() rnorm(1,5,0.5))
## simmer environment: Clinica familiar IMSS 178 | now: 0 | next: 0
## { Monitor: in memory }
## { Resource: enfermera | monitored: TRUE | server status: 0(2) | queue status: 0(Inf) }
## { Resource: doctor | monitored: TRUE | server status: 0(3) | queue status: 0(Inf) }
## { Resource: farmacia | monitored: TRUE | server status: 0(2) | queue status: 0(Inf) }
## { Source: paciente | monitored: 1 | n_generated: 0 }
proceso %>% run(until = 660) #Tiempo de servicio en el IMSS 178 de 8AM a 7PM
## simmer environment: Clinica familiar IMSS 178 | now: 660 | next: 661.432558327041
## { Monitor: in memory }
## { Resource: enfermera | monitored: TRUE | server status: 2(2) | queue status: 43(Inf) }
## { Resource: doctor | monitored: TRUE | server status: 3(3) | queue status: 0(Inf) }
## { Resource: farmacia | monitored: TRUE | server status: 1(2) | queue status: 0(Inf) }
## { Source: paciente | monitored: 1 | n_generated: 132 }
#La llegada total de pacientes es de 100

#Si no corre la simulación, tenemos que verificar que este habilitada la función simmer en Packages.

plot(proceso,what="resources",metric="usage",c("enfermera","doctor","farmacia"),items=c("server","queue"))
## Warning: 'plot.simmer' is deprecated.
## Use 'plot(get_mon_resources(x))' instead.
## See help("Deprecated")

plot(proceso,what="arrivals",metric="waiting_time")
## Warning: 'plot.simmer' is deprecated.
## Use 'plot(get_mon_arrivals(x))' instead.
## See help("Deprecated")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#CONCLUSIÓN: #Con el análisis realizado se concluye que se requiere una enfermera más y un doctor adicional.