/// <summary> /// Asociar campos a su definición /// </summary> /// <param name="definicionSegmento">Definición del segmento</param> /// <param name="campos">Campos a asignar</param> private void AsociarCampos(Hashtable definicionSegmento, string[] campos) { Hashtable tabla = new Hashtable(); if (campos.Length <= definicionSegmento.Count) { Consola.Imprimir("-----" + campos[0] + "-----"); tabla.Add("Segment Name", campos[0]); for (int i = 1; i < campos.Length; i++) { if (campos[i] != "") { Consola.Imprimir(definicionSegmento[i] + ": " + campos[i]); tabla.Add(definicionSegmento[i], campos[i]); } } lista.Add(tabla); Console.WriteLine("----------------------------------------------------------------------"); } else { Consola.Imprimir("La definición de " + definicionSegmento[0] + " no concuerda con la cantidad de campos del mensaje"); Consola.Imprimir(campos.Length + "-" + definicionSegmento.Count); valido = false; } }
/// <summary> /// Busca una modalidad según su código de HL7 /// </summary> /// <param name="descripcion">Código de la modalidad en HL7</param> /// <returns></returns> public static int BuscarModalidad(string descripcion) { DataTable codigo_modalidad = new DataTable(); string sql = "SELECT codigo_modalidad FROM modalidad WHERE descripcion = '" + descripcion + "'"; try { codigo_modalidad = Conexion.Seleccionar(sql); if (codigo_modalidad.Rows.Count > 0) { int codigo = Convert.ToInt32(codigo_modalidad.Rows[0][0]); return(codigo); } else { Consola.Imprimir("No existe descripción de la modalidad en la base de datos"); return(-1); } } catch (Exception e) { Consola.Imprimir("Ha ocurrido una excepción " + e.Message); return(-1); } }
/// <summary> /// Procesa un determinado tipo de mensaje /// </summary> /// <param name="lista">Lista de definiciones</param> private void ProcesarTipoMensaje(List <Hashtable> lista) { Consola.Imprimir("Mensaje separado correctamente."); string[] tipoMensajeCompleto = BuscarTipoMensaje(lista).Split('^'); string tipoMensaje = ""; if (tipoMensajeCompleto.Length >= 2) { tipoMensaje = tipoMensajeCompleto[0] + "^" + tipoMensajeCompleto[1]; } switch (tipoMensaje) { case "ADT^A01": ProcesarAdmision(lista); break; case "ORM^O01": ProcesarOrden(lista); break; default: Consola.Imprimir("No se acepta este tipo de mensaje"); break; } }
/// <summary> /// Procesa la admisión de un paciente /// </summary> /// <param name="lista">Datos</param> private void ProcesarAdmision(List <Hashtable> lista) { foreach (Hashtable segmento in lista) { if (segmento["Segment Name"].Equals("PID")) { if (segmento.ContainsKey("Patient ID")) { Consola.Imprimir("Insertando paciente..."); try { PacienteControl.Insertar(segmento); Consola.Imprimir("Paciente insertado."); listo = true; } catch (Exception e) { Consola.Imprimir(e.ToString()); } break; } else { Consola.Imprimir("Faltan campos obligatorios en el PID..."); } } } }
/// <summary> /// Comprueba la versión del mensaje /// </summary> private void ComprobarVersion() { foreach (Hashtable segmento in lista) { if (segmento["Segment Name"].Equals("MSH")) { string version = (string)segmento["Version ID"]; if (version != null) { Regex regex = new Regex(@"2.4"); Match match = regex.Match(version); if (match.Success) { Consola.Imprimir("Versión correcta."); } else { Consola.Imprimir("La versión de HL7 no se acepta. Asegúrate de que el mensaje esté en 2.4"); valido = false; } } else { Consola.Imprimir("El mensaje debe tener todos los campos requeridos."); valido = false; } } } }
/// <summary> /// Enviar mensaje a través del socket /// </summary> /// <param name="mensaje">Mensaje a enviar</param> public void EnviarMensaje(string mensaje) { try { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint direccion = new IPEndPoint(IPAddress.Parse(ip), puerto); socket.Connect(direccion); Consola.Imprimir("Enviando mensaje..."); Consola.Imprimir(mensaje); byte[] bytes = Encoding.Default.GetBytes(mensaje); socket.Send(bytes, 0, bytes.Length, 0); socket.Close(); Consola.Imprimir("Mensaje enviado. A la IP " + ip); } catch (Exception e) { Consola.Imprimir("No se pudo enviar el mensaje."); Consola.Imprimir(e.ToString()); } }
/// <summary> /// Este hilo convierte los mensajes /// </summary> /// <param name="mensaje">Mensaje a convertir</param> /// <param name="clienteIP">IP al que enviar la respuesta</param> private void ConvertirMensaje(string mensaje, string clienteIP) { Consola.Imprimir("Convirtiendo el mensaje..."); ProcesadorMensaje procesadorMensaje = new ProcesadorMensaje(mensaje); procesadorMensaje.Empezar(); EnviarACK(procesadorMensaje.ObtenerTipoMensajeRespuesta(), procesadorMensaje.ObtenerMSH(), clienteIP); }
/// <summary> /// Este hilo se encarga de escuchar mensajes HL7 /// </summary> public void EscucharPuerto() { try { Consola.Imprimir("Iniciando servidor..."); Consola.Imprimir("IP: " + IP); Consola.Imprimir("Puerto: " + PUERTO); Consola.Imprimir("Número de conexiones máximo: " + CONEXIONES_MAXIMAS); while (true) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint direccion = new IPEndPoint(IPAddress.Parse(IP), PUERTO); socket.Bind(direccion); socket.Listen(CONEXIONES_MAXIMAS); Socket escuchar = socket.Accept(); byte[] bytes = new byte[32768]; int a = escuchar.Receive(bytes, 0, bytes.Length, 0); Array.Resize(ref bytes, a); string mensaje = Encoding.UTF8.GetString(bytes); if (mensaje.Length > 0) { mensaje = mensaje.Substring(2); string clienteIP = escuchar.RemoteEndPoint.ToString(); Consola.Imprimir("Mensaje recibido"); Thread hilo = new Thread(() => ConvertirMensaje(mensaje, clienteIP)); hilo.Start(); escuchar.Close(); socket.Close(); } else { Consola.Imprimir("Ocurrió un problema con el mensaje: " + mensaje); } } } catch (Exception e) { Consola.Imprimir("Ocurrió un problema al iniciar el servidor."); Consola.Imprimir(e.ToString()); } }
/// <summary> /// Actualiza el agendamiento a cancelado /// </summary> /// <param name="codigoEstudio">Código del estudio</param> public static void BorrarAgendamiento(string codigoEstudio) { string sql = "UPDATE estudio SET cancelado = '1' where codigo_estudio=" + codigoEstudio; try { Conexion.Ejecutar(sql); Consola.Imprimir("Se cancelo correctamente."); } catch (Exception e) { Consola.Imprimir("Error al cancelar."); } }
/// <summary> /// Actualiza el estudio del paciente a admitido /// </summary> /// <param name="codigoEstudio">Código del estudio</param> public static void AdmitirPaciente(string codigoEstudio) { string sql = "UPDATE estudio SET admitido = '1' where codigo_estudio=" + codigoEstudio; try { Conexion.Ejecutar(sql); Consola.Imprimir("Se admitio el estudio correctamente."); } catch (Exception e) { Consola.Imprimir("Error al cancelar."); } }
/// <summary> /// Lista las modalidades /// </summary> /// <returns>Tabla resultado</returns> public static DataTable Listar() { const string sql = "SELECT modalidad.codigo_modalidad AS 'CODIGO MODALIDAD', modalidad.nombre AS 'NOMBRE DE LA MODALIDAD', modalidad.descripcion AS 'DESCRIPCION' FROM modalidad"; try { return(Conexion.Seleccionar(sql)); } catch (Exception e) { Consola.Imprimir(e.ToString()); MessageBox.Show("Ha ocurrido un error con la conexión."); return(null); } }
/// <summary> /// Empieza a procesar el mensaje /// </summary> public void Empezar() { List <Hashtable> lista = lector.LeerMensaje(mensaje); BuscarMSH(lista); if (lector.EsValido()) { ProcesarTipoMensaje(lista); } else { Consola.Imprimir("El mensaje no es válido"); } }
/// <summary> /// Elegir segmento /// </summary> /// <param name="campos">Arreglo de campos</param> private void ElegirSegmento(string[] campos) { Hashtable definicionSegmento = BuscarSegmento(campos[0]); if (definicionSegmento != null) { if (campos.Length > 0) { AsociarCampos(definicionSegmento, campos); } } else { Consola.Imprimir("No reconocido el segmento " + campos[0]); } }
/// <summary> /// Ejecutar en la base de datos /// </summary> /// <param name="sql">Consulta</param> public static void Ejecutar(string sql) { Consola.Imprimir("Ejecutando consulta: " + sql); DataTable dataTable = new DataTable(); MySqlConnection connection; string connectionString = "SERVER= localhost; DATABASE=db_agendamiento; UID= root ;PASSWORD= ; Convert Zero Datetime=True"; connection = new MySqlConnection(connectionString); connection.Open(); MySqlCommand cmd = new MySqlCommand(sql, connection); cmd.ExecuteNonQuery(); connection.Close(); }
/// <summary> /// Busca el paciente según su código /// </summary> /// <param name="codigoPaciente">Código de paciente</param> /// <returns></returns> public static Paciente BuscarPaciente(string codigoPaciente) { string sql = "SELECT * FROM paciente WHERE codigo_paciente = " + codigoPaciente; try { DataTable paciente = Conexion.Seleccionar(sql); Paciente datos_paciente = new Paciente(codigoPaciente, paciente.Rows[0][1].ToString(), paciente.Rows[0][2].ToString(), paciente.Rows[0][3].ToString(), paciente.Rows[0][4].ToString(), paciente.Rows[0][5].ToString(), Convert.ToDateTime(paciente.Rows[0][6].ToString()), paciente.Rows[0][7].ToString(), paciente.Rows[0][8].ToString()); return(datos_paciente); } catch (Exception e) { Consola.Imprimir(e.ToString()); MessageBox.Show("Ha ocurrido un error en la conexión.", "¡Error!"); return(null); } }
/// <summary> /// Genera un accession number aleatorio /// </summary> /// <returns>Accession number</returns> public static string GenerarAccessionNumber() { var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; var stringChars = new char[6]; var random = new Random(); for (int i = 0; i < stringChars.Length; i++) { stringChars[i] = chars[random.Next(chars.Length)]; } var finalString = new String(stringChars); Consola.Imprimir(finalString); return(finalString); }
/// <summary> /// Buscar estudios /// </summary> /// <returns>Tabla resultado de la consulta</returns> public static DataTable BuscarEstudios() { string SQL = "SELECT paciente.codigo_paciente as 'CODIGO PACIENTE', paciente.nombres AS 'NOMBRES',paciente.apellido_paterno AS 'APELLIDO PATERNO',paciente.apellido_materno AS 'APELLIDO MATERNO', paciente.genero as 'GENERO', paciente.fecha_nacimiento as 'FECHA DE NACIMIENTO', modalidad.nombre AS 'MODALIDAD', modalidad.descripcion AS 'DESCRIPCION', estudio.numero_acceso AS 'ACCESSION NUMBER', estudio.codigo_estudio AS 'CODIGO ESTUDIO', estudio.fecha_inicio AS 'FECHA INICIO',estudio.fecha_fin AS 'FECHA FIN', estudio.medico_referencia AS 'MEDICO DE REFERENCIA', estudio.medico_ejercicio AS 'MEDICO DE EJERCICIO', estudio.admitido AS 'ADMITIDO',estudio.cancelado AS 'CANCELADO' FROM paciente INNER JOIN estudio ON paciente.codigo_paciente = estudio.codigo_paciente INNER JOIN modalidad ON estudio.codigo_modalidad = modalidad.codigo_modalidad WHERE estudio.admitido = '0' AND estudio.cancelado = '0'"; try { DataTable consulta = Conexion.Seleccionar(SQL); return(consulta); } catch (Exception e) { Consola.Imprimir(e.ToString()); MessageBox.Show("Error al consultar en la base de datos"); } return(null); }
/// <summary> /// Insertar un estudio /// </summary> /// <param name="estudio">Datos del estudio</param> public static void Insertar(Estudio estudio) { if (VerificarHorario(estudio)) { string SQL = "INSERT INTO estudio(codigo_paciente,codigo_modalidad,numero_acceso,medico_referencia,medico_ejercicio,cancelado,admitido,fecha_inicio,fecha_fin) VALUES('" + estudio.CodigoPaciente + "','" + estudio.CodigoModalidad + "','" + estudio.NumeroDeAcceso + "','" + estudio.MedicoDeReferencia + "','" + estudio.MedicoDeEjercicio + "'," + estudio.Cancelado + "," + estudio.Admitido + ",'" + estudio.FechaInicio.ToString("s") + "','" + estudio.FechaFin.ToString("s") + "')"; try { Conexion.Ejecutar(SQL); } catch (Exception e) { Consola.Imprimir(e.ToString()); MessageBox.Show("Error al insertar en la base de datos"); } } }
/// <summary> /// Seleccionar en la base de datos /// </summary> /// <param name="sql">Consulta</param> /// <returns></returns> public static DataTable Seleccionar(string sql) { Consola.Imprimir("Ejecutando consulta: " + sql); DataTable dataTable = new DataTable(); MySqlConnection connection; string connectionString = "SERVER= localhost; DATABASE=db_agendamiento; UID= root ;PASSWORD= ; Convert Zero Datetime=True"; connection = new MySqlConnection(connectionString); connection.Open(); MySqlCommand cmd = new MySqlCommand(sql, connection); MySqlDataReader rdr = cmd.ExecuteReader(); dataTable.Load(rdr); connection.Close(); return(dataTable); }
/// <summary> /// Verifica si el paciente existe /// </summary> /// <param name="PID_LECTURA">Datos del paciente</param> /// <returns>Verdadero o falso</returns> public static bool VerificarPacienteExistente(Hashtable PID_LECTURA) { string codigoPaciente = (((string)PID_LECTURA[DefinicionSegmento.PID[2]]).Split('^'))[0]; string sql = "SELECT * FROM paciente WHERE codigo_paciente = '" + codigoPaciente + "'"; try { DataTable paciente = Conexion.Seleccionar(sql); return((paciente.Rows.Count == 1) ? true : false); } catch (Exception e) { Consola.Imprimir(e.ToString()); MessageBox.Show("Ha ocurrido un error en la conexión.", "¡Error!"); return(false); } }
/// <summary> /// Seleccionar estudios para una fecha y una modalidad determinada /// </summary> /// <param name="codigoModalidad">Código de la modalidad</param> /// <param name="fechaSeleccionada">Fecha seleccionada</param> /// <returns></returns> public static DataTable SeleccionarEstudiosPorFechaYModalidad(int codigoModalidad, string fechaSeleccionada) { DataTable datos = new DataTable(); string sql = @"SELECT paciente.codigo_paciente as 'CODIGO PACIENTE', paciente.nombres AS 'NOMBRES',paciente.apellido_paterno AS 'APELLIDO PATERNO',paciente.apellido_materno AS 'APELLIDO MATERNO', paciente.genero as 'GENERO', modalidad.nombre AS 'MODALIDAD', estudio.numero_acceso AS 'ACCESSION NUMBER', estudio.codigo_estudio AS 'CODIGO ESTUDIO', estudio.fecha_inicio AS 'FECHA INICIO',estudio.fecha_fin AS 'FECHA FIN', estudio.medico_referencia AS 'MEDICO DE REFERENCIA', estudio.medico_ejercicio AS 'MEDICO DE EJERCICIO',estudio.admitido AS 'ADMITIDO',estudio.cancelado AS 'CANCELADO' FROM " + "paciente INNER JOIN estudio ON paciente.codigo_paciente = estudio.codigo_paciente" + " INNER JOIN modalidad ON estudio.codigo_modalidad = modalidad.codigo_modalidad" + " WHERE estudio.codigo_modalidad = " + codigoModalidad + " AND CAST(fecha_inicio AS DATE) = CAST('" + fechaSeleccionada + "'AS DATE)" + " AND estudio.admitido = '1'"; try { datos = Conexion.Seleccionar(sql); return(datos); } catch (Exception e) { Consola.Imprimir(e.Message); return(null); } }
/// <summary> /// Buscar estudios asignados a una modalidad /// </summary> /// <param name="codigo">Código de la modalidad</param> /// <returns></returns> public static DataTable BuscarEstudiosPorModalidad(int codigo) { string fecha = DateTime.Now.ToString("s"); string sql = @" SELECT paciente.codigo_paciente as 'CODIGO PACIENTE', paciente.nombres AS 'NOMBRES',paciente.apellido_paterno AS 'APELLIDO PATERNO',paciente.apellido_materno AS 'APELLIDO MATERNO', paciente.genero as 'GENERO', paciente.fecha_nacimiento as 'FECHA DE NACIMIENTO', modalidad.nombre AS 'MODALIDAD', modalidad.descripcion AS 'DESCRIPCION', estudio.numero_acceso AS 'ACCESSION NUMBER', estudio.codigo_estudio AS 'CODIGO ESTUDIO', estudio.fecha_inicio AS 'FECHA INICIO',estudio.fecha_fin AS 'FECHA FIN', estudio.medico_referencia AS 'MEDICO DE REFERENCIA', estudio.medico_ejercicio AS 'MEDICO DE EJERCICIO', estudio.admitido AS 'ADMITIDO',estudio.cancelado AS 'CANCELADO' FROM estudio INNER JOIN modalidad ON estudio.codigo_modalidad = modalidad.codigo_modalidad INNER JOIN paciente on estudio.codigo_paciente = paciente.codigo_paciente WHERE estudio.codigo_modalidad = " + codigo + " AND estudio.admitido = '1' AND CAST(estudio.fecha_inicio AS DATE) = CAST('" + fecha + "' AS DATE)"; try { return(Conexion.Seleccionar(sql)); } catch (Exception e) { Consola.Imprimir(e.ToString()); MessageBox.Show("Ha ocurrido un error con la conexión."); return(null); } }
/// <summary> /// Divir en segmentos /// </summary> /// <param name="mensaje">Mensaje en formato texto</param> private void DividirEnSegmentos(string mensaje) { string[] segmentos = mensaje.Split('\r'); if (segmentos.Length > 0) { DividirEnCamposMSH(segmentos[0]); segmentos = QuitarPrimerElemento(segmentos); foreach (string segmento in segmentos) { DividirEnCampos(segmento); } } else { Consola.Imprimir("El mensaje no tiene ningún segmento."); valido = false; } }
/// <summary> /// Verificar si el horario está disponible /// </summary> /// <param name="estudio">Datos del estudio</param> /// <returns></returns> public static bool VerificarHorario(Estudio estudio) { string SQL = "SELECT * FROM estudio WHERE ((estudio.fecha_inicio BETWEEN '" + estudio.FechaInicio.ToString("s") + "' AND '" + estudio.FechaFin.ToString("s") + "') OR (estudio.fecha_fin BETWEEN '" + estudio.FechaInicio.ToString("s") + "' AND '" + estudio.FechaFin.ToString("s") + "')) AND estudio.codigo_modalidad = " + estudio.CodigoModalidad; try { DataTable consulta = Conexion.Seleccionar(SQL); if (consulta.Rows.Count == 0) { Consola.Imprimir("El horario es aceptado."); return(true); } } catch (Exception e) { Consola.Imprimir(e.ToString()); MessageBox.Show("Error al consultar en la base de datos"); } Consola.Imprimir("El horario no fue aceptado."); return(false); }
/// <summary> /// Genera un mensaje de acknowledgement /// </summary> /// <param name="tipoACK">Tipo de mensaje</param> /// <param name="MSH">Información del MSH</param> /// <returns></returns> public static string GenerarMensaje(string tipoACK, Hashtable MSH) { if (MSH != null) { try { string encabezado = "MSH" + Convert.ToString(MSH["Field Separator"]); string MSA = ""; for (int i = 2; i < DefinicionSegmento.MSH.Count; i++) { if (MSH.ContainsKey(DefinicionSegmento.MSH[i]) && i < MSH.Count - 1 && i != 3 && i != 4 && i != 5 && i != 6 && i != 9) { encabezado += MSH[DefinicionSegmento.MSH[i]] + Convert.ToString(MSH["Field Separator"]); } else if (i == DefinicionSegmento.MSH.Count - 1) { if (MSH.ContainsKey(DefinicionSegmento.MSH[i])) { encabezado += MSH[DefinicionSegmento.MSH[i]]; } else { encabezado += ""; } } else if (i == 3) { string sendingApplication = ""; string sendingFacility = ""; string receivingApplication = ""; string receivingFacility = ""; if (MSH.ContainsKey(DefinicionSegmento.MSH[3])) { receivingApplication = MSH[DefinicionSegmento.MSH[3]].ToString(); } if (MSH.ContainsKey(DefinicionSegmento.MSH[4])) { receivingFacility = MSH[DefinicionSegmento.MSH[4]].ToString(); } if (MSH.ContainsKey(DefinicionSegmento.MSH[5])) { sendingApplication = MSH[DefinicionSegmento.MSH[5]].ToString(); } if (MSH.ContainsKey(DefinicionSegmento.MSH[6])) { sendingFacility = MSH[DefinicionSegmento.MSH[6]].ToString(); } encabezado += sendingApplication + Convert.ToString(MSH["Field Separator"]) + sendingFacility + Convert.ToString(MSH["Field Separator"]) + receivingApplication + Convert.ToString(MSH["Field Separator"]) + receivingFacility + Convert.ToString(MSH["Field Separator"]); } else if (i == 9) { string[] tipoMensajeCompleto = MSH[DefinicionSegmento.MSH[i]].ToString().Split('^'); string tipoMensaje = ""; if (tipoMensajeCompleto.Length >= 1) { tipoMensaje = "ACK^" + tipoMensajeCompleto[1]; } encabezado += tipoMensaje + Convert.ToString(MSH["Field Separator"]); } else { encabezado += Convert.ToString(MSH["Field Separator"]); } } MSA += "MSA" + Convert.ToString(MSH["Field Separator"]) + tipoACK + Convert.ToString(MSH["Field Separator"]) + MSH[DefinicionSegmento.MSH[10]]; return(encabezado + "\r" + MSA); } catch (Exception e) { Consola.Imprimir("Faltan campos en el MSH"); } } else { Consola.Imprimir("Ocurrió un error al crear el mensaje ACK"); } return(""); }
/// <summary> /// Procesar estudio /// </summary> /// <param name="lista">Datos</param> private void ProcesarOrden(List <Hashtable> lista) { bool correcto = true; string codigo_paciente = ""; int codigo_modalidad = -1; string numero_acceso = GeneradorIdentificadores.GenerarAccessionNumber(); string medico_referencia = ""; string medico_ejercicio = ""; bool admitido = false; bool cancelado = false; DateTime fecha_inicio = DateTime.Now; DateTime fecha_fin = DateTime.Now; foreach (Hashtable segmento in lista) { if (segmento["Segment Name"].Equals("PID")) { bool pacienteCorrecto = VerificarPaciente(segmento); if (pacienteCorrecto) { codigo_paciente = segmento["Patient ID"].ToString().Split('^')[0]; } else { Consola.Imprimir("El paciente no existe."); } correcto = correcto && pacienteCorrecto; } if (segmento["Segment Name"].Equals("OBR")) { if (segmento.ContainsKey("Diagnostic Serv Sect ID")) { codigo_modalidad = ModalidadControl.BuscarModalidad((string)segmento["Diagnostic Serv Sect ID"]); if (codigo_modalidad == -1) { Consola.Imprimir("No existe ese Diagnostic Serv Sect ID"); correcto = false; } } else { Consola.Imprimir("El mensaje no tiene el Diagnostic Serv Sect ID"); correcto = false; } if (segmento.ContainsKey("Observation Date/Time") && segmento.ContainsKey("Observation End Date/Time")) { fecha_inicio = ConversorFechas.ConvertirFechaHL7((string)segmento["Observation Date/Time"]); fecha_fin = ConversorFechas.ConvertirFechaHL7((string)segmento["Observation End Date/Time"]); } else { Consola.Imprimir("La orden debe tener hora inicio y hora fin"); correcto = false; } } if (segmento["Segment Name"].Equals("PV1")) { if (segmento.ContainsKey("Attending Doctor")) { medico_ejercicio = (string)segmento["Attending Doctor"]; } if (segmento.ContainsKey("Referring Doctor")) { medico_referencia = (string)segmento["Referring Doctor"]; } } } if (correcto) { listo = true; Consola.Imprimir("Procesamiento de ORM exitoso"); Estudio estudio = new Estudio(codigo_paciente, codigo_modalidad, numero_acceso, medico_referencia, medico_ejercicio, admitido, cancelado, fecha_inicio, fecha_fin); EstudioControl.Insertar(estudio); } else { listo = false; Consola.Imprimir("Procesamiento de ORM fallido"); } }