from abc import ABC, abstractmethod from datetime import datetime, timedelta # Sujeto (Observable) class Sujeto(ABC): def __init__(self): self.observadores = [] def adjuntar(self, observador): self.observadores.append(observador) def desadjuntar(self, observador): self.observadores.remove(observador) def notificar(self): for observador in self.observadores: observador.actualizar(self) # Observador class Observador(ABC): @abstractmethod def actualizar(self, sujeto): pass # Paciente (Sujeto) class Paciente(Sujeto): def __init__(self, nombre, cedula): super().__init__() self.nombre = nombre self.cedula = cedula self.cita_medica = None def solicitar_servicio_medico(self, servicio): print(f"{self.nombre} solicita {servicio}") self.notificar() def modificar_cita(self, citas_disponibles): confirmacion = input("¿Está seguro de modificar esta cita? (si/no): ") if confirmacion.lower() == "si": print("Otras citas médicas disponibles:") for i, cita in enumerate(citas_disponibles, start=1): print(f"{i}. {cita}") opcion_cita = int(input("Seleccione el número de la cita deseada: ")) nueva_cita = citas_disponibles[opcion_cita - 1] self.cita_medica = nueva_cita print(f"{self.nombre} ha modificado la cita: {nueva_cita}") else: print("La cita no ha sido modificada.") def cancelar_cita(self): confirmacion = input("¿Está seguro de cancelar esta cita? (si/no): ") if confirmacion.lower() == "si": print(f"{self.nombre} ha cancelado la cita: {self.cita_medica}") self.cita_medica = None else: print("La cita no ha sido cancelada.") def informacion_cita_medica(self): if self.cita_medica: print(f"Información de cita médica para {self.nombre}: {self.cita_medica}") else: print("No hay cita médica programada para este paciente.") def seleccionar_cita_medica(self, cita): self.cita_medica = cita print(f"Cita médica seleccionada para {self.nombre}: {cita}") # Doctor (Observador) class Doctor(Observador): def __init__(self, nombre, area): self.nombre = nombre self.area = area self.historial_medico = {} # Diccionario para almacenar datos del paciente def actualizar(self, sujeto): print(f"Notificación para el doctor {self.nombre}: {sujeto.nombre} ha solicitado un servicio médico en el área de {self.area}.") def registrar_paciente(self, nombre_paciente, cedula_paciente): self.historial_medico[cedula_paciente] = {'nombre': nombre_paciente, 'diagnostico': ''} def consultar_historial_medico(self, cedula_paciente): paciente = self.historial_medico.get(cedula_paciente) if paciente: print(f"Nombre: {paciente['nombre']}, Cédula: {cedula_paciente}, Diagnóstico: {paciente['diagnostico']}") else: print("No hay historial médico para este paciente.") # Función para obtener fechas disponibles def obtener_fechas_disponibles(num_dias=7): fechas_disponibles = [] hora_inicio = 8 # Hora de inicio de las citas duracion_cita = 1 # Duración de cada cita en horas hoy = datetime.now().date() for i in range(num_dias): fecha = hoy + timedelta(days=i) for hora in range(hora_inicio, 18): hora_disponible = f"{hora:02d}:00" fecha_hora = f"{fecha.strftime('%d/%m/%Y')} {hora_disponible}" fechas_disponibles.append(fecha_hora) return fechas_disponibles # Clase principal if __name__ == "__main__": while True: opcion = input("Selecciona tu rol (1. Paciente, 2. Doctor): ") if opcion == "1": # Paciente paciente_nombre = input("Ingrese su nombre: ") paciente_cedula = input("Ingrese su número de cédula: ") paciente = Paciente(paciente_nombre, paciente_cedula) while True: print("\nOpciones para paciente:") print("1. Solicitar consulta médica") print("2. Solicitar exámenes") print("3. Solicitar ecografía") print("4. Modificar cita") print("5. Cancelar cita") print("6. Información de cita médica") print("7. Salir") opcion_paciente = input("Ingrese la opción deseada: ") if opcion_paciente == "1": # Solicitar consulta médica print("Áreas disponibles:") print("1. Medicina general") print("2. Odontología") print("3. Psicología") area = input("Ingrese el número del área deseada: ") doctor = "" if area == "1": doctor = "Dr. Alberto Ruiz" area_nombre = "Medicina general" elif area == "2": doctor = "Dra. Maria Lara" area_nombre = "Odontología" elif area == "3": doctor = "Dra. Eugenia Mera" area_nombre = "Psicología" else: print("Área no válida.") continue print("Fechas disponibles para consulta médica:") fechas_disponibles = obtener_fechas_disponibles() for i, fecha in enumerate(fechas_disponibles[:10], start=1): print(f"{i}. {fecha} con el doctor {doctor}") opcion_fecha = int(input("Seleccione el número de la fecha deseada: ")) fecha_seleccionada = fechas_disponibles[opcion_fecha - 1] paciente.seleccionar_cita_medica({'doctor': doctor, 'area': area_nombre, 'fecha': fecha_seleccionada, 'hora': ''}) elif opcion_paciente == "2": # Solicitar exámenes print("Tipos de exámenes disponibles:") print("1. Hemograma completo") print("2. Panel básico metabólico") print("3. Perfil hepático") examen = input("Ingrese el número del examen deseado: ") if examen in ["1", "2", "3"]: print("Fechas disponibles para los exámenes:") fechas_disponibles = obtener_fechas_disponibles() for i, fecha in enumerate(fechas_disponibles[:10], start=1): print(f"{i}. {fecha}") opcion_fecha = int(input("Seleccione el número de la fecha deseada: ")) fecha_seleccionada = fechas_disponibles[opcion_fecha - 1] paciente.solicitar_servicio_medico(f"{examen} para el {fecha_seleccionada}") else: print("Examen no válido.") elif opcion_paciente == "3": # Solicitar ecografía print("Tipos de ecografías disponibles:") print("1. Ecografía pélvica") print("2. Ecografía de partes blandas") print("3. Ecografía vascular") ecografia = input("Ingrese el número de la ecografía deseada: ") if ecografia in ["1", "2", "3"]: print("Fechas disponibles para las ecografías:") fechas_disponibles = obtener_fechas_disponibles() for i, fecha in enumerate(fechas_disponibles[:10], start=1): print(f"{i}. {fecha}") opcion_fecha = int(input("Seleccione el número de la fecha deseada: ")) fecha_seleccionada = fechas_disponibles[opcion_fecha - 1] paciente.solicitar_servicio_medico(f"{ecografia} para el {fecha_seleccionada}") else: print("Tipo de ecografía no válida.") elif opcion_paciente == "4": # Modificar cita paciente.informacion_cita_medica() citas_disponibles = obtener_fechas_disponibles() paciente.modificar_cita(citas_disponibles) elif opcion_paciente == "5": # Cancelar cita paciente.informacion_cita_medica() paciente.cancelar_cita() elif opcion_paciente == "6": # Información de cita médica paciente.informacion_cita_medica() elif opcion_paciente == "7": # Salir break else: print("Opción no válida.") elif opcion == "2": # Doctor print("\nSeleccione su área:") print("1. Medicina general (Dr. Alberto Ruiz)") print("2. Odontología (Dra. Maria Lara)") print("3. Psicología (Dra. Eugenia Mera)") area = input("Ingrese el número del área deseada: ") doctor_nombre = "" if area == "1": doctor_nombre = "Dr. Alberto Ruiz" elif area == "2": doctor_nombre = "Dra. Maria Lara" elif area == "3": doctor_nombre = "Dra. Eugenia Mera" else: print("Área no válida.") continue doctor = Doctor(doctor_nombre, area) while True: print("\nOpciones para doctor:") print("1. Registrar datos del paciente") print("2. Consultar historial médico del paciente") print("3. Salir") opcion_doctor = input("Ingrese la opción deseada: ") if opcion_doctor == "1": # Registrar datos del paciente nombre_paciente = input("Nombre del paciente: ") cedula_paciente = input("Cédula del paciente: ") diagnostico = input("Ingrese el diagnóstico del paciente: ") print(f"Datos del paciente registrados por el doctor {doctor_nombre}: Nombre: {nombre_paciente}, Cédula: {cedula_paciente}, Diagnóstico: {diagnostico}") doctor.registrar_paciente(nombre_paciente, cedula_paciente) elif opcion_doctor == "2": # Consultar historial médico del paciente cedula_paciente = input("Ingrese la cédula del paciente para consultar su historial médico: ") doctor.consultar_historial_medico(cedula_paciente) elif opcion_doctor == "3": # Salir break else: print("Opción no válida.") else: print("Rol no válido.") revisa errores y haz que el diagnostico que el doctor registre se pueda visualizal consultar la historia clinica
function that: add two numbers together ```python def add(a, b): return a + b add(1, 2) ``` function that: from abc import ABC, abstractmethod from datetime import datetime, timedelta # Sujeto (Observable) class Sujeto(ABC): def __init__(self): self.observadores = [] def adjuntar(self, observador): self.observadores.append(observador) def desadjuntar(self, observador): self.observadores.remove(observador) def notificar(self): for observador in self.observadores: observador.actualizar(self) # Observador class Observador(ABC): @abstractmethod def actualizar(self, sujeto): pass # Paciente (Sujeto) class Paciente(Sujeto): def __init__(self, nombre, cedula): super().__init__() self.nombre = nombre self.cedula = cedula self.cita_medica = None def solicitar_servicio_medico(self, servicio): print(f"{self.nombre} solicita {servicio}") self.notificar() def modificar_cita(self, citas_disponibles): confirmacion = input("¿Está seguro de modificar esta cita? (si/no): ") if confirmacion.lower() == "si": print("Otras citas médicas disponibles:") for i, cita in enumerate(citas_disponibles, start=1): print(f"{i}. {cita}") opcion_cita = int(input("Seleccione el número de la cita deseada: ")) nueva_cita = citas_disponibles[opcion_cita - 1] self.cita_medica = nueva_cita print(f"{self.nombre} ha modificado la cita: {nueva_cita}") else: print("La cita no ha sido modificada.") def cancelar_cita(self): confirmacion = input("¿Está seguro de cancelar esta cita? (si/no): ") if confirmacion.lower() == "si": print(f"{self.nombre} ha cancelado la cita: {self.cita_medica}") self.cita_medica = None else: print("La cita no ha sido cancelada.") def informacion_cita_medica(self): if self.cita_medica: print(f"Información de cita médica para {self.nombre}: {self.cita_medica}") else: print("No hay cita médica programada para este paciente.") def seleccionar_cita_medica(self, cita): self.cita_medica = cita print(f"Cita médica seleccionada para {self.nombre}: {cita}") # Doctor (Observador) class Doctor(Observador): def __init__(self, nombre, area): self.nombre = nombre self.area = area self.historial_medico = {} # Diccionario para almacenar datos del paciente def actualizar(self, sujeto): print(f"Notificación para el doctor {self.nombre}: {sujeto.nombre} ha solicitado un servicio médico en el área de {self.area}.") def registrar_paciente(self, nombre_paciente, cedula_paciente): self.historial_medico[cedula_paciente] = {'nombre': nombre_paciente, 'diagnostico': ''} def consultar_historial_medico(self, cedula_paciente): paciente = self.historial_medico.get(cedula_paciente) if paciente: print(f"Nombre: {paciente['nombre']}, Cédula: {cedula_paciente}, Diagnóstico: {paciente['diagnostico']}") else: print("No hay historial médico para este paciente.") # Función para obtener fechas disponibles def obtener_fechas_disponibles(num_dias=7): fechas_disponibles = [] hora_inicio = 8 # Hora de inicio de las citas duracion_cita = 1 # Duración de cada cita en horas hoy = datetime.now().date() for i in range(num_dias): fecha = hoy + timedelta(days=i) for hora in range(hora_inicio, 18): hora_disponible = f"{hora:02d}:00" fecha_hora = f"{fecha.strftime('%d/%m/%Y')} {hora_disponible}" fechas_disponibles.append(fecha_hora) return fechas_disponibles # Clase principal if __name__ == "__main__": while True: opcion = input("Selecciona tu rol (1. Paciente, 2. Doctor): ") if opcion == "1": # Paciente paciente_nombre = input("Ingrese su nombre: ") paciente_cedula = input("Ingrese su número de cédula: ") paciente = Paciente(paciente_nombre, paciente_cedula) while True: print("\nOpciones para paciente:") print("1. Solicitar consulta médica") print("2. Solicitar exámenes") print("3. Solicitar ecografía") print("4. Modificar cita") print("5. Cancelar cita") print("6. Información de cita médica") print("7. Salir") opcion_paciente = input("Ingrese la opción deseada: ") if opcion_paciente == "1": # Solicitar consulta médica print("Áreas disponibles:") print("1. Medicina general") print("2. Odontología") print("3. Psicología") area = input("Ingrese el número del área deseada: ") doctor = "" if area == "1": doctor = "Dr. Alberto Ruiz" area_nombre = "Medicina general" elif area == "2": doctor = "Dra. Maria Lara" area_nombre = "Odontología" elif area == "3": doctor = "Dra. Eugenia Mera" area_nombre = "Psicología" else: print("Área no válida.") continue print("Fechas disponibles para consulta médica:") fechas_disponibles = obtener_fechas_disponibles() for i, fecha in enumerate(fechas_disponibles[:10], start=1): print(f"{i}. {fecha} con el doctor {doctor}") opcion_fecha = int(input("Seleccione el número de la fecha deseada: ")) fecha_seleccionada = fechas_disponibles[opcion_fecha - 1] paciente.seleccionar_cita_medica({'doctor': doctor, 'area': area_nombre, 'fecha': fecha_seleccionada, 'hora': ''}) elif opcion_paciente == "2": # Solicitar exámenes print("Tipos de exámenes disponibles:") print("1. Hemograma completo") print("2. Panel básico metabólico") print("3. Perfil hepático") examen = input("Ingrese el número del examen deseado: ") if examen in ["1", "2", "3"]: print("Fechas disponibles para los exámenes:") fechas_disponibles = obtener_fechas_disponibles() for i, fecha in enumerate(fechas_disponibles[:10], start=1): print(f"{i}. {fecha}") opcion_fecha = int(input("Seleccione el número de la fecha deseada: ")) fecha_seleccionada = fechas_disponibles[opcion_fecha - 1] paciente.solicitar_servicio_medico(f"{examen} para el {fecha_seleccionada}") else: print("Examen no válido.") elif opcion_paciente == "3": # Solicitar ecografía print("Tipos de ecografías disponibles:") print("1. Ecografía pélvica") print("2. Ecografía de partes blandas") print("3. Ecografía vascular") ecografia = input("Ingrese el número de la ecografía deseada: ") if ecografia in ["1", "2", "3"]: print("Fechas disponibles para las ecografías:") fechas_disponibles = obtener_fechas_disponibles() for i, fecha in enumerate(fechas_disponibles[:10], start=1): print(f"{i}. {fecha}") opcion_fecha = int(input("Seleccione el número de la fecha deseada: ")) fecha_seleccionada = fechas_disponibles[opcion_fecha - 1] paciente.solicitar_servicio_medico(f"{ecografia} para el {fecha_seleccionada}") else: print("Tipo de ecografía no válida.") elif opcion_paciente == "4": # Modificar cita paciente.informacion_cita_medica() citas_disponibles = obtener_fechas_disponibles() paciente.modificar_cita(citas_disponibles) elif opcion_paciente == "5": # Cancelar cita paciente.informacion_cita_medica() paciente.cancelar_cita() elif opcion_paciente == "6": # Información de cita médica paciente.informacion_cita_medica() elif opcion_paciente == "7": # Salir break else: print("Opción no válida.") elif opcion == "2": # Doctor print("\nSeleccione su área:") print("1. Medicina general (Dr. Alberto Ruiz)") print("2. Odontología (Dra. Maria Lara)") print("3. Psicología (Dra. Eugenia Mera)") area = input("Ingrese el número del área deseada: ") doctor_nombre = "" if area == "1": doctor_nombre = "Dr. Alberto Ruiz" elif area == "2": doctor_nombre = "Dra. Maria Lara" elif area == "3": doctor_nombre = "Dra. Eugenia Mera" else: print("Área no válida.") continue doctor = Doctor(doctor_nombre, area) while True: print("\nOpciones para doctor:") print("1. Registrar datos del paciente") print("2. Consultar historial médico del paciente") print("3. Salir") opcion_doctor = input("Ingrese la opción deseada: ") if opcion_doctor == "1": # Registrar datos del paciente nombre_paciente = input("Nombre del paciente: ") cedula_paciente = input("Cédula del paciente: ") diagnostico = input("Ingrese el diagnóstico del paciente: ") print(f"Datos del paciente registrados por el doctor {doctor_nombre}: Nombre: {nombre_paciente}, Cédula: {cedula_paciente}, Diagnóstico: {diagnostico}") doctor.registrar_paciente(nombre_paciente, cedula_paciente) elif opcion_doctor == "2": # Consultar historial médico del paciente cedula_paciente = input("Ingrese la cédula del paciente para consultar su historial médico: ") doctor.consultar_historial_medico(cedula_paciente) elif opcion_doctor == "3": # Salir break else: print("Opción no válida.") else: print("Rol no válido.") revisa errores y haz que el diagnostico que el doctor registre se pueda visualizal consultar la historia clinica ```Python