示例#1
0
        /// <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;
            }
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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;
            }
        }
示例#4
0
        /// <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...");
                    }
                }
            }
        }
示例#5
0
        /// <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;
                    }
                }
            }
        }
示例#6
0
        /// <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());
            }
        }
示例#7
0
        /// <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);
        }
示例#8
0
        /// <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());
            }
        }
示例#9
0
        /// <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.");
            }
        }
示例#10
0
        /// <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.");
            }
        }
示例#11
0
        /// <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);
            }
        }
示例#12
0
        /// <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");
            }
        }
示例#13
0
        /// <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]);
            }
        }
示例#14
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();
        }
示例#15
0
        /// <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);
            }
        }
示例#16
0
        /// <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);
        }
示例#17
0
        /// <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);
        }
示例#18
0
        /// <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");
                }
            }
        }
示例#19
0
        /// <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);
        }
示例#20
0
        /// <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);
            }
        }
示例#21
0
        /// <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);
            }
        }
示例#22
0
        /// <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);
            }
        }
示例#23
0
        /// <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;
            }
        }
示例#24
0
        /// <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);
        }
示例#25
0
        /// <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("");
        }
示例#26
0
        /// <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");
            }
        }