Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » En Comunidad » Proyectos » Interfaz HL7 con un sistema RIS de Carestream Responder al tema
Nuevo tema


Página 1 de 1  [ 10 mensajes ] 
 
Nota 2011-04-20 11:43 @530

Perlero Nuevo
Registrado: 2011-04-15 14:49 @659
Mensajes: 37
Interfaz HL7 con un sistema RIS de Carestream
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 375 veces ]
Nota 2011-04-20 12:44 @572
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Interfaz HL7 con un sistema RIS de Carestream
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:
Syntax: [ Download ] [ Hide ]
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

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


Nota 2011-04-20 13:14 @593

Perlero Nuevo
Registrado: 2011-04-15 14:49 @659
Mensajes: 37
Re: Interfaz HL7 con un sistema RIS de Carestream
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.


Nota 2011-04-20 15:17 @678
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Interfaz HL7 con un sistema RIS de Carestream
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


Nota 2011-04-20 16:39 @736

Perlero Nuevo
Registrado: 2011-04-15 14:49 @659
Mensajes: 37
Re: Interfaz HL7 con un sistema RIS de Carestream
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?


Nota 2011-04-21 05:26 @268
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Interfaz HL7 con un sistema RIS de Carestream
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


Nota 2011-04-25 13:14 @593

Perlero Nuevo
Registrado: 2011-04-15 14:49 @659
Mensajes: 37
Re: Interfaz HL7 con un sistema RIS de Carestream
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.


Nota 2011-05-12 10:09 @464

Perlero Nuevo
Registrado: 2011-04-15 14:49 @659
Mensajes: 37
Re: Interfaz HL7 con un sistema RIS de Carestream
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?


Nota 2011-05-15 07:59 @374
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Interfaz HL7 con un sistema RIS de Carestream
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


Nota 2011-05-26 13:24 @600

Perlero Nuevo
Registrado: 2011-04-15 14:49 @659
Mensajes: 37
Re: Interfaz HL7 con un sistema RIS de Carestream
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.


Responder al tema  [ 10 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO