«

»

Lug 11

Improving Mirth experience: manipolazione degli HL7

Ho dovuto progettare un’applicazione Mirth (un web service) che riceve un messaggio SOAP contenente un testo HL7 i cui dettagli sono qui riassunti:

  • sbustare il messaggio HL7 da SOAP;
  • salvare la testata in Oracle
  • se il documento HL7 è di tipo MDM, estrarre l’allegato contenuto nel campo OBX
  • salvare il documento nel NAS sotto la directory yyyy/mm/dd/nomefile.pdf.p7m
  • per ogni riga
    • salvarla in un’altra tabella Oracle
    • se la riga è di tipo TXA, al 16° segnaposto | (msg[‘TXA’][‘TXA.16’]) scrivere il path completo del NAS in cui è stato salvato il file.
    • invocare una procedura Oracle che controlla il dato e restituire al chiamante la sua stringa di risposta.

Uno dei punti più delicati è il penultimo. Ho percorso tre strade per poter arrivare alla soluzione.

1) modifica della riga di testo TXA utilizzando le espressioni regolari. Da questo punto di vista, attenzione ad applicare la funzione text.replace(regexp, newString) se text è una stringa Java ma non Javascript!!! Mirth ritorna un errore durante l’invocazione del costruttore (The choice of Java constructor replace matching JavaScript argument types (function,string) is ambiguous;): occorre prima trasformare la stringa text java in una stringa javascript con la seguente istruzione:

 text = text + “”;

dopodiché l’applicazione della regexp

/[|]{n}/

si comporta in modo stocastico (non mi becca la n-esima occorrenza di | e fa sostituzioni non richieste). NO WAY.

2) modifica della riga di testo TXA utilizzando la funzione split: questa istruzione non riconosce il needle | (e nemmeno ^; riconosce solo &); si tratta di caratteri di controllo delle espressioni regolari, ma anche l’applicazione di un carattere di escape () non sortisce effetto. NO WAY.

3) modifica del messaggio XML nel filter dell’applicazione destination, attraverso l’istruzione

 msg['TXA']['TXA.16'] = $('oggi') + '/' + $('filename') + ".pdf.p7m";

poi riconverto l’XML in HL7

 var raw = SerializerFactory.getHL7Serializer(false, false, true).fromXML(msg);

e procedo con lo split delle righe.

Attenzione: l’uso del Filter mi permette di modificare il messaggio raw PRIMA dell’esecuzione dello step di destination. Se uso il transformer, non funziona (Mirth esegue il transformer dopo aver eseguito lo step di destination).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>