• Publicidad

Interfaz HL7 con un sistema RIS de Carestream

¿Estás desarrollando un proyecto, o piensas hacerlo? Pon aquí tu propuesta, lo más seguro es que alguien esté interesado en ayudarte.

Interfaz HL7 con un sistema RIS de Carestream

Notapor Hector Gutierrez » 2011-04-20 11:43 @530

Desarrollé en Perl la interfaz para dar de alta pacientes de un sistema hospitalario a un RIS de marca CARESTREAM bajo las premisas de HL7.

La situación actual es que la cadena de caracteres que se envían al RIS cumple el estándar de HL7 pero el RIS no lo acepta.

Comento que la cadena es correcta porque realicé una comparación entre un archivo que me fue proporcionado por el proveedor del equipo contra el que realicé (anexo imagen) y ambas cadenas las comparé con un editor profesional que tomé de Internet y son iguales.

He llegado a la conclusión de que solo falta incluir caracteres de transmisión de datos. La pregunta es: ¿alguien a desarrollado una interfaz bajo estándares HL7?
Adjuntos
INTERFASE HL7.jpg
INTERFASE HL7.jpg (148.82 KiB) Visto 3198 veces
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659

Publicidad

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor explorer » 2011-04-20 12:44 @572

Bueno, se ven las diferencias, que cambian algunos campos.

¿Y los finales de línea? ¿Seguro que son los mismos?

En esta definición del estándar HL7 (del año 2003), dice que los mensajes empiezan con un carácter \x0b, y acaban con un pareja \x1c\x0d. Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. \xb
  2. MSH|^~\&|DISPADT||ASTRAIA|astraia|20030508110000||ADT^A08|1437549872|P|2.2||
  3. EVN|A08|200305081100
  4. PID|1||00000123456||Public^""^J.^""^""^""||19700101|F|||Somestreet^1^Nieuwegein^^3432AA^""||030-1234567|||""|""||||||""|""
  5. ZPI|1|||DoctorDr.^^""^""^""|||||||""
  6. PV1|1|O||
  7. IN1|||PART|Partikulier|||||||||||P|||||||||||||||||||||""
  8. \x1c
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

En la captura de pantalla que nos muestras, sí que parece que no hay diferencias en el primer carácter, pero sí que marca como diferencia el último.

Te recomiendo que mires el contenido de los mensajes con un editor/visor hexadecimal, para ver exactamente, el interior de los mensajes.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor Hector Gutierrez » 2011-04-20 13:14 @593

Los segmentos terminan o están separados por un 0x0D y el final del mensaje con un 0x0D 0x0A, tomando como base el archivo correcto que me proporcionó el proveedor del equipo y supuse que el inicio sería un carácter 11 es decir un 0x0B.

Te anexo los 2 archivos, mismos que he analizado con el editor WinHex para detectar si al inicio del archivo correcto contenía algún carácter de inicio, no lo detecté, además me gustaría me pudieras enviar la referencia de donde obtuviste la imagen que anexaste. La razón: una vez concluido el proyecto lo quiero poner a disposición de quien lo necesite.
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor explorer » 2011-04-20 15:17 @678

No veo los ficheros adjuntos... quizás no los pusiste.

El ejemplo que he publicado lo he sacado del enlace que está en el propio mensaje, en el texto "esta definición del estándar HL7".
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor Hector Gutierrez » 2011-04-20 16:39 @736

Me faltaba colocar el carácter de inicio, pero al leer el contenido del enlace textualmente dice:

The socket/channel must be [fconfigure $channel -translation binary -blocking 0 -buffering none] in your accept connection [proc], otherwise it won't work. See socket for examples on starting a server socket

En mi caso la definición para realizar la conexión a la dirección IP y el puerto específico lo defino en Perl de la siguiente manera:

use strict;
use warnings;
use diagnostics;
use Net::Telnet ();
use DBI;
use Time::HiRes qw(usleep);
#-----------------Parametros para la conexion con el SAHOS------------
my $DB_NAME = "dbi:Pg:dbname=interfasehl7";
my $DB_USER = "postgres";
my $DB_PASS = "postgres";

#--------------------Parámetros para conexión con el RIS--------------
my $HOST = '192.9.101.6';
my $PORT = 5003;
my $SLEEP = '500_000';
my $start = "\x{0B}";
my $end = "\x{0D}\x{0A}";
my $segment = "\x{0D}";

#--------------------Telnet y conexion al puerto del RIS---------------
my $t = new Net::Telnet (Telnetmode => 0);
$t->open(Host => $HOST, Port => $PORT) or die 'No se pudo conectar al puerto\n';

¿Estoy cumpliendo con los requisitos del socket o me falta algo?
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor explorer » 2011-04-21 05:26 @268

Net::Telnet es un módulo de nivel superior al del módulo IO::Socket o el del Sockect.

Las exigencias del protocolo dicen que
  • la transmisión ha de ser en binario (no traslación de caracteres)
  • no bloqueante
  • y sin buffering.

Net::Telnet, en cambio, y por defecto:
  • sí hace traslación de los caracteres finales de línea que envía hacia el servidor
  • la salida no es cacheada, pero sí la entrada

Si hay suerte, creo que lo único que habría que hacer es cambiar el comportamiento de la traslación de caracteres. Eso lo consigues con el argumento Binmode => 1 en el new() del Net::Telnet. Y repasar a ver si Output_record_separator e Input_record_separator son conformes a lo que el servidor espera.

En cambio, lo de Telnetmode es más extraño. Si le pones a 0, estás indicando que el servidor al que te conectas no es conforme al estándar TELNET, por lo que el módulo no reconocerá y gestionará comandos estándar de ese protocolo. Debes estar completamente seguro de que el servidor al que te conectas sigue o no el estándar, porque si no lo sigue, entonces deberá ser tu programa quien lo haga (por ejemplo, al recibir un 0x0D 0x00, hay que traducirlo a un simple 0x0D). Yo, en principio, sospecho que es un protocolo TELNET normal, así que lo dejaría en Telnetmode => 1.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor Hector Gutierrez » 2011-04-25 13:14 @593

El servidor cumple el estándar de comunicaciones para los sistemas RIS, es decir para HL7 y tengo programadas pruebas para el 4 de mayo (están de vacaciones), por lo tanto me documentaré sobre lo del binmode y lo de output e input_record_separator. Te mantendré informado.
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor Hector Gutierrez » 2011-05-12 10:09 @464

Probé la aplicación haciendo los siguientes cambios:
1. Coloqué al final de la cadena el "\x1c"
2. Modifiqué la conexión con my $t = new Net::Telnet (Telnetmode => 1, binmode => 1,);
3. Verifiqué en CPAN que Output_record_separator e Input_record_separator solo trasladaran el "\n"
4. Estuve revisando las características de IO::SOCKET, IO::SOCKET::IP, IO::SOCKET::INET y no encuentro dentro de sus explicaciones cómo definir las condiciones de:
  • Transmisión binaria
  • No bloqueante y
  • Sin buffering
Además de que cómo leo la respuesta (ACK)...
¿Alguna sugerencia?
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor explorer » 2011-05-15 07:59 @374

No he mirado en CPAN por si hay algún módulo que facilite la transmisión a bajo nivel, exceptuando Socket.

Pero estamos hablando de un nivel muy bajo de los protocolos...

La verdad... me extraña que se hayan inventado un protocolo nuevo... salvo que quieran poner trabas a otras empresas, o hacer más difícil la creación de programas de terceros, es decir, que no sean los suyos propios.

Por Internet no hay ninguna documentación del protocolo, así que dependemos de lo que nos dices.

Te recomiendo que mires algún módulo más de la familia IO::Socket por si encuentras alguno que te permita ajustar esos valores.

También hay alguno más en la familia Net::Telnet, como por ejemplo Net::Telnet::Options.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Interfaz HL7 con un sistema RIS de Carestream

Notapor Hector Gutierrez » 2011-05-26 13:24 @600

Hola Explorer, te comento que estoy trabajando en otra solución y el lunes hago la prueba definitiva, una vez resulto te comentaré, te enviaré un correo privado, saludos.
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659


Volver a Proyectos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados