# 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
  }
}
## Equipo: NA 
##