use strict;
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";
#--------------------Parametros para conexion con el RIS-----------------------------------
my $HOST = '192.9.101.6';
my $PORT = 5003;
my $SLEEP = '500_000';
#-----------------------------my $start = "\x{11}";
my $end = "\x{0D}\x{0A}";
my $segment = "\x{0D}";
#--------------------Telnet y conexion al puerto del RIS-----------------------------------
#--------------------las 2 lineas de abajo las comente para hacer pruebas locales
#--------------------my $t = new Net::Telnet (Telnetmode => 0);
#--------------------$t->open(Host => $HOST, Port => $PORT) or die 'No se pudo conectar al puerto\n';
#---------------------------------Conexion al SAHOS----------------------------------------
my $dbh = DBI->connect( $DB_NAME, $DB_USER, $DB_PASS ) or die "No se pudo lograr conexión";
#----------------------Preparacion de la lectura del segmento creado del SAHOS-------------
my $SQL_Code = 'select descripciondatos from tbdatos where llave = ?;';
my $sth_lectura = $dbh->prepare($SQL_Code);
#------------------------Preparacion del Insert a la tabla de resultados-------------------
$SQL_Code = 'insert into resultados(descripcion) values (?);';
my $sth_ins = $dbh->prepare($SQL_Code);
my $index = 1;
#---------------- Obtenemos el numero de registros de la tabla de datos --------------------
$SQL_Code = "SELECT count(*) from tbdatos;";
my $sth = $dbh->prepare($SQL_Code) or die "No pude preparar la instrucción: $DBI::errstr";
my $rc = $sth->execute;
if ($DBI::err) {
print "No pude ejecutar la instruccion: $DBI::errstr\n";
}
#-------------- En este paso leemos los registros que nos trajo el sql----------------------
while ( my ($regs) = $sth->fetchrow_array) { # aquí hacemos el ciclo de lectura de la consulta que solicitamos
for ($index=1;$index<=$regs;$index++) {
$sth_lectura->execute($index);
while ( my ($desc) = $sth_lectura->fetchrow_array) { # aquí hacemos el ciclo de lectura de la consulta
print "TX=> $index,$desc\n";
$desc =~ s/EVN/\015EVN/g;
$desc =~ s/PID/\015PID/g;
$desc =~ s/PV1/\015PV1/g;
$desc =~ s/\012//g;
$desc =~ s/\012//g;
$desc =~ s/\012//g;
$desc = $desc . $end;
#--------------print "ESTA ES LA MODIFICACION...............FINAL=> $index,$desc\n";
# $t->print("$desc");
# my ($respuesta) = $t->waitfor(-match => '/\x{0B}/',Timeout => 10, );
#----------------------------my ($respuesta) = $t->waitfor(q(/\x{11}/));
$sth_ins->execute("$desc");
#--------------print "AQUI RECIBIMOS LA RESPUESTA..................RX=> $desc\n";
usleep $SLEEP;
}
}
}
# Con esta instrucción nos desconectamos de la Base de Datos
$dbh->disconnect();
#------$t->close();
# ----------Id: interfase_hl7.pl,v 1.0 2011/03/04 12:25 htgl09 ------------------------
#-----------Id: Se agregaron los caracteres de control 0D antes de cada segmento y al final 0D y 0A
#-----------Id: La respuesta comienza con 0B 2011/04/15 htgl09