Hola buenas, a ver si me podeis dar una idea.
recibo como resultado de una consulta, unos datos de paciente en el campo PID 3, para el pid 123456:
PID|1||NUMERO11122233|123456
el tema es que necesito que cuando haya un ORU con ese mismo pid, el sistema se acuerde tambien y le añada a mayores el campo 3.
¿Se os ocurre una manera de hacerlo?
En teoria almacenandolo en una variable y llamandola cada vez, pero el problema vendria cuando hayan dos peticiones de demograficos, que se podrian mezclar las ids.... ¿alguna idea?
P.D como os podeis imaginar hablamos de numeros autonomicos y demas... 🙁
¿Qué significa "a mayores el campo 3"?
No entiendo cuál puede ser el problema de que te lleguen dos peticiones de demográficos, ya que deben llegar de forma secuencial.
¿Podrías poner un ejemplo práctico de lo que quieres conseguir?
Si lo que quieres usar es variables globales, podrías usarlas con nombres variables. Por ejemplo, para almacenar un valor del pid, y ese valor lo tomas de una consulta tal que así:
SELECT x, y FROM tabla WHERE ...
puedes crear la variable de la forma
globalMap.put('pid + x', y);
Así, tendrás tantas variables como sea necesario y con la garantía de que habrá una por cada pid diferente que la consulta realice.
Por favor, contesta a las preguntas para que pueda ayudarte de una forma más precesia.
Como dicen en FC, me explico como un libro en llamas 🙁
Pongo un esquema denigrante, pero espero que se entienda
El tema es que son dos actos distintos, el recibir los demograficos y la emision de los resultados. El analizador recoge los datos (incluido el pid 3) pero a la hora de reenviarlos como un oru no reconoce el pid3 y no lo envia.
Ademas que son dos canales distintos, no el mismo.
Ejemplo practico:
Pedimos demograficos
MSH|^~&|||||20141028122405||ADR^A19|20141028122404|P|2.5|0||AL|AL|ESP|8859/15|ES<13>
MSA|AA|20141028122404<13>
QRD|||||||1^RD|123456|DEM|<13>
EVN|
Obtengo resultado
PID|1|123456|10083352||IVANOVA^STEFANOVA^ELENOVA||19510825000000|F|||^^DESCONOCIDA^DESCONOCIDA^^ESPAÑA^^DESCONOCIDA||^^^^^^0|||||0|0 0 0|0||||||||||N
Termina la prueba y devuelvo el resultado
MSH|^~&|||||20141028122518||ORU^R01|20141028122518|P^not<32>present|2.2
PID|1|||123456|IVANOVA^ELENOVA|||U
OBR|1||138900^Sample<32>#|34755317|||||||O||||Arterial^||||||||||F<13>
Hola Pablo,
Lo que comentas, al usar 2 canales distintos creo que una opción puede ser que los canales se comuniquen, pero no sé si el canal de solicitud de datos demográficos activa el siguiente (envío de resultados).
Otra opción un poco más limpia es tener una gestión de esos datos o bien en una BBDD o bien en ficheros dentro de tu sistema (con el nombre como el identificador del paciente), que el canal 1 escriba y el canal 2 lea y elimine...
Dime si te he aclarado algo, y si te decantas por alguna de las soluciones propuestas.
Un saludo.
Leer y escribir en una base de datos, es precisamente lo que pretendo evitar...
Podrías usar una variable global con nombre fijo, pero que contenga un array de una dimensión con 2 campos, el primero que sea el nombre del pid y el segundo que contenga la información demográfica relativa a ese pid:
var array = [];
array.push({pid: 123456, campo3: NUMERO11122233});
globalMap.put('array', array);
Cuando tengas que comprobar si ya tienes información sobre ese pid tan sólo tienes que recorrer el array de la forma:
var pid_buscado = 123456;
var info_requerida;
for (var i = 0; i < globalMap.get('array').length; i++){
if (globalMap.get('array')[i].pid == pid_requerido) {
// pid encontrado
info_requerida = globalMap.get('array')[i].campo
}
Tienes que tener en cuenta que, confiar en que la información sobre un paciente no variará desde la primera vez que la obtuviste es un poco arriesgado, por lo que es aconsejable actualizar la información cada cierto tiempo. Podrías para ello agregar un nuevo campo al array para indicar el tiempo que lleva ese dato almacenado.
var array = [];
var hoy = fecha_de_hoy();
array.push({pid: 123456, campo3: NUMERO11122233, fecha_reg: hoy});
globalMap.put('array', array);
Cuando tengas que comprobar si ya tienes información sobre ese pid tan sólo tienes que recorrer el array de la forma:
var pid_buscado = 123456;
var info_requerida;
for (var i = 0; i < globalMap.get('array').length; i++){
if (globalMap.get('array')[i].pid == pid_requerido) {
// pid encontrado
if (!caducidad_alcanzada(globalMap.get('array')[i].fecha_reg)) {
// pid encontrado
info_requerida = globalMap.get('array')[i].campo
}
else {
actualizar_array(array, i);
}
}
}
Hola Nikkator,
Me dejas con la boca abierta, es lo que queria. Ademas la informacion no cambia ¿os suena el NUHSA, CIP, SIP, etc?
Voy a probarlo y familiarizarme con los arrays.
Os digo algo, muchas gracias.