Paradigma FHIR messaging

Il paradigma scelto per lo scambio dei dati con OMr è quello del FHIR messaging. Il paradigma messaging prevede un sender, un receiver, un evento di trigger che innesca la creazione e l’invio di un messaggio, un messaggio di richiesta e uno messaggio di risposta.

Un messaggio FHIR è un Bundle con Bundle.type=message, avente come prima risorsa MessageHeader. Tale Risorsa contiene i metadati del messaggio:

  • EventCoding: evento che porta all'inizio del flusso (MessageHeader.eventCoding);
  • Sender: applicazione che invia il messaggio (MessageHeader.source);
  • Receiver: applicazione che riceve il messaggio (MessageHeader.destination);
  • Message Identifier: identificativo univoco del messaggio (MessageHeader.id);
  • Date/Time: data e ora di creazione del messaggio (Bundle.timestamp).

Un messaggio contiene due identifier obbligatori ed univoci per il mittente, ovvero Bundle.id e MessageHeader.id. Ogni volta che viene inviato lo stesso messaggio il Bundle.id deve cambiare mentre MessageHeader.id rimane invariato.

Quando il destinatario elabora il messaggio, risponderà con:

  • un nuovo Bundle, avente un nuovo Bundle.id;
  • la prima risorsa sarà MessageHeader con source e destination opportuni e un nuovo MessageHeader.id
  • l'attributo MessageHeader.response.identifier sarà valorizzato con il MessageHeader.id del messaggio di richiesta.

Il receiver può restituire un codice di stato 200 OK se il messaggio è stato elaborato con successo. Mentre, i codici di errore sono:

  • 4xx che indica che l’errore è contenuto nel messaggio e il messaggio non va inviato nuovamente;
  • 5xx, il quale indica che l’errore è lato server e il messaggio va inviato nuovamente.

NB: “xx” rappresenta una coppia di numeri che identificano in modo più dettagliato la tipologia di errore.

Qualora ci siano stati degli errori nell'elaborazione del messaggio, il dettaglio dell'errore è riportato in maniera testuale nella risorsa OperationOutcome.

Struttura della richiesta HTTP

L'invio della richiesta a OMr deve essere strutturata seguendo il metodo POST del paradigma HTTP. Le chiamate HTTP devono contenere il seguente header:

Nome header Valore Descrizione
Content-Type application/fhir+json Mime type del formato di scambio

I servizi FHIR esposti dai Sistemi Informativi degli Enti Erogatori sono accessibili attraverso i canali protetti. Per inviare a OMr è necessario inviare una richiesta con la seguente struttura:

    POST [Endpoint-OMr]?async=true&response-url=[URL-target]

dove:

  • Endpoint-OMR rappresenta l'url che espone OMr per ricevere i messaggi in FHIR per questo progetto.
  • async=true è un parametro opzionale che permette di indicare la modalità asincrona.
  • response-url è un parametro opzionale che indica URL-target come endpoint per la restituzione della risposta se diverso dall'enpoint inviante.