# Definir nombres de equipos y características
equipos <- c("bomba de infusión", "Desfibrilador", "Resonador", "Máquina anestesia", "electrobisturí")
caracteristicas <- c("Serie", "modelo", "invima", "fecha_mantenimiento", "Metrologia",
"areá", "preventivo", "Riesgo", "voltaje", "activo_fijo")
# Generar datos aleatorios para las características (excepto Metrologia, areá, preventivo e invima)
set.seed(123) # Fijar la semilla para reproducibilidad
datos <- matrix(rnorm(length(equipos) * (length(caracteristicas) - 4), mean = 50, sd = 10), nrow = length(equipos))
# Crear el dataframe inicial
equipos_medicos <- data.frame(equipos, datos)
colnames(equipos_medicos)[-1] <- caracteristicas[-c(3, 5, 6, 7)] # Excluir invima, Metrologia, areá y preventivo
# Generar valores aleatorios para invima (si o no)
invima <- sample(c("si", "no"), length(equipos), replace = TRUE)
# Generar valores aleatorios para Metrologia (si o no)
metrologia <- sample(c("si", "no"), length(equipos), replace = TRUE)
# Definir áreas del hospital
areas_hospital <- c("Emergencia", "UCI", "Quirófano", "Consultorios", "Laboratorio", "Imagenología")
# Asignar valores aleatorios para área del hospital
areas <- sample(areas_hospital, length(equipos), replace = TRUE)
# Generar valores aleatorios para mantenimiento preventivo (si o no)
preventivo <- sample(c("si", "no"), length(equipos), replace = TRUE)
# Asignar valores al dataframe
equipos_medicos$invima <- invima
equipos_medicos$Metrologia <- metrologia
equipos_medicos$areá <- areas
equipos_medicos$preventivo <- preventivo
# Mostrar el conjunto de datos actualizado
print(equipos_medicos)
## equipos Serie modelo fecha_mantenimiento Riesgo voltaje
## 1 bomba de infusión 44.39524 67.15065 62.24082 67.86913 39.32176
## 2 Desfibrilador 47.69823 54.60916 53.59814 54.97850 47.82025
## 3 Resonador 65.58708 37.34939 54.00771 30.33383 39.73996
## 4 Máquina anestesia 50.70508 43.13147 51.10683 57.01356 42.71109
## 5 electrobisturí 51.29288 45.54338 44.44159 45.27209 43.74961
## activo_fijo invima Metrologia areá preventivo
## 1 33.13307 si no Imagenología si
## 2 58.37787 no si Laboratorio no
## 3 51.53373 no si Emergencia no
## 4 38.61863 si si UCI no
## 5 62.53815 si si Consultorios no
# Función para ingresar un nuevo equipo y sus características
ingresar_nuevo_equipo <- function() {
seguir_agregando <- TRUE
while (seguir_agregando) {
equipo_nuevo <- readline(prompt = "Ingrese el nombre del nuevo equipo: ")
serie <- as.numeric(readline(prompt = "Ingrese el número de serie: "))
modelo <- readline(prompt = "Ingrese el modelo: ")
invima <- readline(prompt = "¿Cuenta con INVIMA (si/no)?: ")
# Corregir el formato de la fecha de mantenimiento
fecha_mantenimiento <- as.Date(readline(prompt = "Ingrese la fecha de mantenimiento (YYYY-MM-DD): "))
metrologia <- readline(prompt = "¿Metrología (si/no)?: ")
area <- readline(prompt = "Ingrese el área del hospital: ")
preventivo <- readline(prompt = "¿Mantenimiento preventivo (si/no)?: ")
riesgo <- as.numeric(readline(prompt = "Ingrese el riesgo: "))
voltaje <- as.numeric(readline(prompt = "Ingrese el voltaje: "))
activo_fijo <- as.numeric(readline(prompt = "Ingrese el número de activo fijo: "))
nuevo_dato <- data.frame(
equipos = equipo_nuevo,
Serie = serie,
modelo = modelo,
invima = invima,
fecha_mantenimiento = fecha_mantenimiento,
Metrologia = metrologia,
areá = area,
preventivo = preventivo,
Riesgo = riesgo,
voltaje = voltaje,
activo_fijo = activo_fijo,
stringsAsFactors = FALSE
)
# Ordenar las columnas en forma ordenada
nuevo_dato <- nuevo_dato[, c("equipos", "Serie", "modelo", "invima", "fecha_mantenimiento", "Metrologia",
"areá", "preventivo", "Riesgo", "voltaje", "activo_fijo")]
# Añadir el nuevo equipo al dataframe existente
equipos_medicos <<- rbind(equipos_medicos, nuevo_dato)
# Mostrar el nuevo equipo agregado
cat("Nuevo equipo agregado:\n")
print(nuevo_dato)
# Preguntar si desea seguir agregando equipos
respuesta <- readline(prompt = "¿Desea ingresar otro equipo? (sí/no): ")
if (tolower(respuesta) != "sí" & tolower(respuesta) != "si") {
seguir_agregando <- FALSE
}
}
}
# Añadir el nuevo equipo al dataframe existente
ingresar_nuevo_equipo()
## Ingrese el nombre del nuevo equipo:
## Ingrese el número de serie:
## Ingrese el modelo:
## ¿Cuenta con INVIMA (si/no)?:
## Ingrese la fecha de mantenimiento (YYYY-MM-DD):
## ¿Metrología (si/no)?:
## Ingrese el área del hospital:
## ¿Mantenimiento preventivo (si/no)?:
## Ingrese el riesgo:
## Ingrese el voltaje:
## Ingrese el número de activo fijo:
## Nuevo equipo agregado:
## equipos Serie modelo invima fecha_mantenimiento Metrologia areá preventivo
## 1 NA <NA>
## Riesgo voltaje activo_fijo
## 1 NA NA NA
## ¿Desea ingresar otro equipo? (sí/no):
# Corregir el formato de las fechas en el dataframe
equipos_medicos$fecha_mantenimiento <- as.Date(equipos_medicos$fecha_mantenimiento)
# Filtrar los equipos que están a 30 días o menos para mantenimiento
alarmas_mantenimiento <- equipos_medicos[equipos_medicos$fecha_mantenimiento <= Sys.Date() + 30, ]
# Mostrar las alarmas de mantenimiento
cat("\nAlarmas de mantenimiento:\n")
##
## Alarmas de mantenimiento:
print(alarmas_mantenimiento)
## equipos Serie modelo fecha_mantenimiento Riesgo
## 1 bomba de infusión 44.39524 67.1506498688328 1970-03-04 67.86913
## 2 Desfibrilador 47.69823 54.609162059892 1970-02-23 54.97850
## 3 Resonador 65.58708 37.3493876539347 1970-02-24 30.33383
## 4 Máquina anestesia 50.70508 43.1314714810647 1970-02-21 57.01356
## 5 electrobisturí 51.29288 45.5433802990004 1970-02-14 45.27209
## NA <NA> NA <NA> <NA> NA
## voltaje activo_fijo invima Metrologia areá preventivo
## 1 39.32176 33.13307 si no Imagenología si
## 2 47.82025 58.37787 no si Laboratorio no
## 3 39.73996 51.53373 no si Emergencia no
## 4 42.71109 38.61863 si si UCI no
## 5 43.74961 62.53815 si si Consultorios no
## NA NA NA <NA> <NA> <NA> <NA>
# Asumiendo que la fecha de mantenimiento está en formato "DD-MM-YYYY"
equipos_medicos$fecha_mantenimiento <- as.Date(equipos_medicos$fecha_mantenimiento, format = "%d-%m-%Y")
# Calcular la diferencia en días entre la fecha actual y la fecha de mantenimiento
equipos_medicos$dias_para_mantenimiento <- as.numeric(difftime(Sys.Date(), equipos_medicos$fecha_mantenimiento, units = "days"))
# Filtrar los equipos que están a 30 días o menos para mantenimiento
alarmas_mantenimiento <- equipos_medicos[equipos_medicos$dias_para_mantenimiento <= 30, ]
# Subrayar y mostrar el equipo que requiere mantenimiento
cat("\nEquipos que requieren mantenimiento en los próximos 30 días:\n")
##
## Equipos que requieren mantenimiento en los próximos 30 días:
for (i in 1:nrow(alarmas_mantenimiento)) {
if (i == 1) {
cat("\033[4m") # Subrayar el texto
}
cat(paste("Equipo:", alarmas_mantenimiento$equipos[i], "\n"))
if (i == 1) {
cat("\033[0m") # Restaurar el formato
}
}
## [4mEquipo: NA
## [0m